postgresql 按任意间隔分组

4dbbbstv  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(165)

我有一个类型为timestamp的列,我想按随机时间段(可以是10秒,甚至5小时)动态地对结果进行分组。
假设,我有这样的数据:
Image
如果用户提供2小时,并希望得到air_pressure,我希望将第一行与第二行合并,结果如下所示:

date                    | max air_pressure 
2022-11-22 00:00:00:000 | 978.81666667
2022-11-22 02:00:00:000 | 978.53
2022-11-22 04:00:00:000 | 987.23333333

等等。就像我提到的,周期必须很容易改变,因为也许他想按天/秒分组...
这个函数应该像date_trunc()函数一样工作。但是那只能按分钟/秒/小时分组,而我想按任意间隔分组。

efzxgjgh

efzxgjgh1#

基本上:

SELECT g.start_time, max(air_pressure) AS max_air_pressure
FROM   generate_series($start
                     , $end
                     , interval '15 min') g(start_time)
LEFT   JOIN tbl t ON t.date_id >= g.start_time
                 AND t.date_id <  g.start_time + interval '15 min'  -- same interval
GROUP  BY 1
ORDER  BY 1;

$start$end是界定您感兴趣的时间范围的时间戳。
返回所有时隙,如果未找到与时隙匹配的条目,则返回max_air_pressureNULL
参见:

  • 按任意时间间隔对行计数的最佳方法

旁白:"date_id"对于timestamp来说是一个不幸的列名。

相关问题