我有一张表格,其间隔5分钟,即5 10 15 20 ...
该表有3列(id号,log_ts日期,计数),并且有数百万行。到目前为止,我一直在使用以下查询来总结特定日期的“计数”列。
我需要在每小时级别汇总
select id, SUM(count)
log_ts + DECODE(TO_CHAR(log_ts , 'MI'), '05', 55/1440, '10', 50/1440, '15', 45/1440, '20',40/1440,'25',35/1440,'30',30/1440,'35',25/1440,'40',20/1440,'45',15/1440,'50',10/1440,'55',5/1440,0) TS
from example_table
Group by id,
log_ts + DECODE(TO_CHAR(log_ts , 'MI'), '05', 55/1440, '10', 50/1440, '15', 45/1440, '20',40/1440,'25',35/1440,'30',30/1440,'35',25/1440,'40',20/1440,'45',15/1440,'50',10/1440,'55',5/1440,0)
是否有其他方法可以在小时级别聚合时间列,其中包含5分钟级别的数据。
答案 0 :(得分:2)
您需要使用TRUNC()
,它可以截断日期/数字等到指定的时间单位。
每小时,format model为HH
。这使您的查询:
select trunc(log_ts, 'HH'), sum(count)
from example_table
group by trunc(log_ts, 'HH')
我认为您的列的名称实际上不是COUNT
。如果是,我建议将其更改为非关键字。
答案 1 :(得分:0)
试试这个,
SELECT id, trunc(log_ts, 'HH'), sum(count)
FROM example_table
GROUP BY id, trunc(log_ts, 'HH');