SQL 5分単位での値集計

SQLはまったく触ったことなく、今後も使えそうな集計方法なので備忘録として残しておく。

以下は5分単位での値を集計したものである。

select	
	case 
		-- substringで取得した値が4以下であるかの条件式
		when substring(cast(to_char(date,'YYYY/MM/DD HH24:MI') as varchar),length(cast(to_char(date,'YYYY/MM/DD HH24:MI') as varchar)),1) <= '4' 
		-- 4以下の場合、抽出した文字(15文字)の末尾に5を連結
		then substring(cast(date as varchar), 1, 15) || '5'
		-- それ以外の場合、抽出した文字(15文字)の末尾に0を連結
		else substring(cast((date + interval'5 MINUTE') AS varchar), 1, 15) || '0'
		-- dateカラムをclockカラムに命名し直して出力
		end as  clock
		-- 5分毎のsequenceカラムに含まれる値(DHCPREQUEST、DHCPACK、DHCPDISCOVER)を集計
,	count(sequence like 'DHCPREQUEST%' OR NULL)     as DHCPREQUEST
,   count(sequence like 'DHCPACK%' OR NULL)         as DHCPACK
,   count(sequence like 'DHCPDISCOVER%' OR NULL)    as DHCPDISCOVER
from dhcp 
	group by clock 
	order by clock
;

結果はこのように5分ごとの集計値が取得できている。

      clock       | dhcprequest | dhcpack | dhcpdiscover
------------------+-------------+---------+--------------
 2022-04-10 03:45 |         485 |     489 |           56
 2022-04-10 03:50 |         943 |     945 |           70
 2022-04-10 03:55 |         759 |     762 |           70
 2022-04-10 04:00 |         634 |     636 |           73

今後膨大な量のログを集計、分析したりすることが増えそうなので結構使えそうだ。

タイトルとURLをコピーしました