从 Postgresql 数据库计算的月-小时平均

时间:2021-04-15 17:32:40

标签: postgresql datetime

我在数据库中有时间和值。我需要计算给定月份每小时的平均值,即

YYYY-mm-dd (the day can be omitted)
2021-01-01 00:00:00 value=avg(values from 00:00:00 until 00:59:59 for every day of this month at this hour interval) 
2021-01-01 01:00:00 value=avg(values from 01:00:00 until 01:59:59 idem as above)
...
2021-01-01 23:00:00 value=avg(values from 23:00:00 until 23:59:59)
2021-02-01 00:00:00 value=avg(values from 00:00:00 until 00:59:59)
2021-02-01 01:00:00 value=avg(values from 01:00:00 until 01:59:59)
...
2021-02-01 23:00:00 value=avg(values from 23:00:00 until 23:59:59)
...

1 个答案:

答案 0 :(得分:2)

您可以在 GROUP BY 语句中使用 date_trunc('hour', datestamp),类似这样。

SELECT DATE_TRUNC('hour', datestamp) hour_beginning, AVG(value) average_value
  FROM mytable
 WHERE datestamp >= '2021-01-01'
   AND datestamp <  '2021-02-01'
 GROUP BY DATE_TRUNC('hour', datestamp)
 ORDER BY DATE_TRUNC('hour', datestamp)

概括地说,您可以使用任何单射函数代替 DATE_TRUNC

你可以使用

to_char(datestamp, 'YYYY-MM-01 HH24:00:00')

在您的日期范围内每个月每小时获得一个结果行。

SELECT to_char(datestamp, 'YYYY-MM-01 HH24:00:00') hour, 
       AVG(value) average_value
  FROM mytable
 GROUP BY to_char(datestamp, 'YYYY-MM-01 HH24:00:00')
 ORDER BY to_char(datestamp, 'YYYY-MM-01 HH24:00:00')