按任意区间分组



我有一个类型为时间戳的列。我想按随机时间段(可以是10秒甚至5小时)动态分组结果。

假设我有这样的数据:

形象如果用户提供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()一样工作。但那只能按分钟/秒/小时分组,而我想按任意间隔分组。

基本上:

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是划分您感兴趣的时间框架的时间戳。

返回所有时隙,如果没有找到与时隙匹配的条目,则返回NULLmax_air_pressure

:

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

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

相关内容

  • 没有找到相关文章

最新更新