0

我有一个表格,其中有 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 分钟级别的数据。

4

2 回答 2

2

您需要使用TRUNC(),它可以将日期/数字等截断为指定的时间单位。

对于每小时,格式模型HH. 这使您的查询:

select trunc(log_ts, 'HH'), sum(count)
  from example_table
 group by trunc(log_ts, 'HH')

我假设您的专栏名称实际上不是COUNT. 如果是,我建议将其更改为不是关键字的内容。

于 2013-10-09T07:22:02.363 回答
0

像这样试试

SELECT id, trunc(log_ts, 'HH'), sum(count)
FROM   example_table
GROUP BY id, trunc(log_ts, 'HH');
于 2013-10-09T13:27:48.157 回答