我有一个类型为时间戳的列。我想按随机时间段(可以是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
是划分您感兴趣的时间框架的时间戳。
返回所有时隙,如果没有找到与时隙匹配的条目,则返回NULL
为max_air_pressure
。
:
- 按任意时间间隔计算行数的最佳方法
旁白:"date_id"对于timestamp
来说是一个不合适的列名。