【问题标题】:Postgres group by timestamp into 6 hourly bucketsPostgres 按时间戳分组为 6 个每小时的存储桶
【发布时间】:2014-04-05 03:32:50
【问题描述】:

我有以下简单的表格:

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

我想将 VALUES 和 GROUP 每天的 TIMESTAMP 平均分为 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 个时段,欢迎任何帮助。

【问题讨论】:

标签: sql postgresql


【解决方案1】:

我认为将(时间戳的小时数 / 6)的商的整数值分组应该会有所帮助。试试看是否有帮助。 您的 group by 应该类似于

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 个组,这正是您所需要的。

【讨论】:

  • 一个简单而优雅的解决方案,非常感谢您的帮助,它完美运行。
  • 谢谢,尽管我的 MSSQL 基本相同的想法只是使用 DatePart(hh,timestamp) / 6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多