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