
いつもお世話になってます。
PostgreSQL-9.6.11-1、Windows10です。
以下のような「直近3日の1時間おきの集計」を取得するSQLがありました。
CREATE TABLE public.t_history ( id integer, regist_timestamp timestamp without time zone NOT NULL, regist_user character varying(50) NOT NULL, CONSTRAINT t_history_pkey PRIMARY KEY (id) )
SQL
1SELECT 2 datetable.datetime, 3 COALESCE(total.cnt, 0) as count 4FROM 5( 6 7 SELECT TO_CHAR(generate_series, 'YYYY/MM/DD HH24') as datetime 8 FROM 9 generate_series( 10 CAST(TO_CHAR(NOW() + INTERVAL '-3 day', 'YYYY/MM/DD HH24:00:00') AS timestamp), 11 CAST(TO_CHAR(NOW(), 'YYYY/MM/DD HH24:00:00') AS timestamp), 12 '1 hour' 13 ) 14) AS datetable 15 16 17LEFT JOIN 18( 19 20 SELECT 21 TO_CHAR(end_timestamp, 'YYYY/MM/DD HH24') as datetime, 22 count(*) AS cnt 23 FROM 24 ( 25 26 SELECT * FROM t_history 27 WHERE 28 29 end_timestamp >= CAST(TO_CHAR(NOW() + INTERVAL '-3 day', 'YYYY/MM/DD HH24:00:00') AS timestamp) 30 ) as source 31 32 GROUP BY datetime 33) AS total 34ON datetable.datetime = total.datetime 35 36ORDER BY datetable.datetime DESC
こちらを流用して、
・直近3日→特定の1日
・1時間おき→5分おき
に変更したいです。
下記のように日付指定を追加しましたが、絞り込み出来ませんでした。
※コメント部分
SQL
1SELECT 2 datetable.datetime, 3 COALESCE(total.cnt, 0) as count 4FROM 5( 6 7 SELECT TO_CHAR(generate_series, 'YYYY/MM/DD HH24') as datetime 8 FROM 9 generate_series( 10 CAST(TO_CHAR(NOW() + INTERVAL '-3 day', 'YYYY/MM/DD HH24:00:00') AS timestamp), 11 CAST(TO_CHAR(NOW(), 'YYYY/MM/DD HH24:00:00') AS timestamp), 12 '1 hour' 13 ) 14) AS datetable 15 16 17LEFT JOIN 18( 19 20 SELECT 21 TO_CHAR(end_timestamp, 'YYYY/MM/DD HH24') as datetime, 22 count(*) AS cnt 23 FROM 24 ( 25 26 SELECT * FROM t_history 27 WHERE 28 --日付指定追加 29 regist_timestamp = '2018/12/12' 30 --end_timestamp >= CAST(TO_CHAR(NOW() + INTERVAL '-3 day', 'YYYY/MM/DD HH24:00:00') AS timestamp) 31 ) as source 32 33 GROUP BY datetime 34) AS total 35ON datetable.datetime = total.datetime 36 37ORDER BY datetable.datetime DESC
分かる方教えていただけないでしょうか?
どうぞ宜しくお願い致します。


回答3件
あなたの回答
tips
プレビュー