前提・実現したいこと
開始日と終了日がそれぞれ記録されている端末の紐付けられているid数を日別で集計をしたいのですが、
下記クエリは動作するものの、実際の数と合わず困っています。
例えば、
10/17に開始,10/19に開始,10/22の3端末があるとしたら、
10/17 1
10/18 1
10/19 2
10/20 2
10/21 2
10/22 3
のように結果が出される状態の物を想定しています。
クエリの間違いを指摘いただければ幸いです。よろしくお願いします。
テーブル(device_histories)構成 id:履歴id started_at:紐付け開始日(2020年10月19日以降に紐付け開始されたものが今回取りたいです) ended_at:終了日(中身は全て空白です。つまり今日の日付まで取り外しがなく紐付けられている状態になります) device_type:デバイスの種類(今回はタイプ2で限定したいです) サンプルデータ id started_at ended_at device_type 679000 2020-10-15 12:13 2 342000 2020-10-15 21:35 2 275000 2020-10-19 10:10 2 689000 2020-10-30 22:50 2 990000 2020-11-01 08:50 2
該当のソースコード
posgreSQL
1select 2 CZ.axis 3 ,count(CZ.id) 4from 5 ( 6 SELECT 7 TO_DATE(TO_CHAR(X.axis, 'YYYY-MM-DD'),'YYYY-MM-DD') as axis 8 ,CX.id 9 ,CX.started_at 10 ,CX.ended_at 11 from 12 ( SELECT GENERATE_SERIES( 13 (select cast(min(started_at+ interval '9 hour') as date) from device_histories as X) 14 , (select cast(max(now()) as date) from device_histories as Y) 15 ,'1 day' 16 )as axis 17 ) as X 18 LEFT JOIN 19 device_histories as CX 20 ON 21 (CX.started_at<= X.axis and now()>=X.axis) 22 where 23 id <> 0 24 AND 25 device_type = 2 26 and 27 (started_at+ interval '9 hour') >= '2020-10-19' 28 order by 29 X.axis 30 ) as CZ 31group by 32 CZ.axis 33order by 34 CZ.axis 35;
回答1件
あなたの回答
tips
プレビュー