Postgres按时间戳分组为6小时桶

时间:2014-03-03 21:21:32

标签: sql postgresql

我有以下简单的表格:

ID      TIMESTAMP               VALUE
4   2011-05-27 15:50:04 1253
5   2011-05-27 15:55:02 1304
6   2011-05-27 16:00:02 1322
7   2011-05-27 16:05:01 1364

我想将VALUESGROUPTIMESTAMP天平均分为6小时。例如00:00至06:00,06:00至12:00,12:00至18:00& 18:00至00:00。

我可以按年,月,日和分组进行分组小时使用以下查询:

select avg(VALUE),
  EXTRACT(year from TIMESTAMP) AS year,
  EXTRACT(month from TIMESTAMP) AS month,
  EXTRACT(day from TIMESTAMP) as day
    from TABLE
      group by year,month,day

但我无法按照上面的定义将每一天分为4个时段,我们非常欢迎任何帮助。

1 个答案:

答案 0 :(得分:31)

我认为对(时间戳/ 6的小时)的商的整数值进行分组应该会有所帮助。试一试,看看它是否有帮助。 你的小组应该是

group by year, month, day, trunc(EXTRACT(hour from TIMESTAMP) / 6)

这背后的逻辑是,当日期的小时部分除以6时,int值只能是

    0 - 0:00 - 5:59:59
    1 - 6:00 - 11:59:59
    2 - 12:00 - 17:59:59
    3 - 18:00 - 23:59:59

使用此分组应该将您的数据每天分成4组,这正是您所需要的。