Oracle 11g SQL - 按时间戳分组

时间:2017-03-21 09:10:14

标签: oracle oracle11g group-by

在Cx_Oracle 11g数据库中我有两列:' timestamp'和'价值'。我需要一个查询来获得每小时一次的平均值。这是最好的方法吗?时间戳是从纪元开始的几秒钟。

1 个答案:

答案 0 :(得分:1)

如果TIMESTAMP列属于TIMESTAMP数据类型,则将TIMESTAMP值截断为小时,然后将其分组:

SELECT   TRUNC( timestamp_column, 'HH24' ) AS timestamp_hours,
         AVG( value ) AS average_value
FROM     your_table
GROUP BY TRUNC( timestamp_column, 'HH24' );

如果:

  

时间戳是从纪元开始的秒数。

SELECT   TRUNC( epoch_column / 3600 ) AS hours_from_epoch,
         AVG( value ) AS average_value
FROM     your_table
GROUP BY TRUNC( epoch_column / 3600 );

如果您需要handle leap seconds,那么您将需要一个闰秒列表(并在将来维护它),然后在计算时间时将其考虑在内。