【发布时间】:2021-10-08 12:39:33
【问题描述】:
我有函数(来自this 问题),它每 5 分钟对值进行分组并计算 min/avg/max:
SELECT (FLOOR(clock / 300) * 300) as period_start,
MIN(value), AVG(value), MAX(value)
FROM data
WHERE clock BETWEEN 1622667600 AND 1625259600
GROUP BY FLOOR(clock / 300);
但是,由于缺少值,一些五分钟的时间段被跳过,导致时间线不一致。怎样才能让在一段时间内没有数据的情况下,max/avg/min的值变成0,而不是被跳过?
例如:
如果我有时间戳 - 值
- 1200000001 - 100
- 1200000002 - 300
- 1200000301 - 100
- 1200000601 - 300
我想得到这个:(选择 min/avg/max,时间在 1200000000 和 1200001200 之间)
- 1200000000 - 100/200/300
- 1200000300 - 100/100/100
- 1200000600 - 300/300/300
- 1200000900 - 0/0/0
而不是这个:(1200000000 和 1200001200 之间的时间)
- 1200000000 - 100/200/300
- 1200000300 - 100/100/100
- 1200000600 - 300/300/300
- 1200000900 - 这条线不会,我只会得到上面的 3 行。 1200000900 到 1200001200 之间没有数据可供计算。
【问题讨论】:
-
以 CREATE TABLE + INSERT INTO 脚本的形式提供示例数据,并为该数据提供所需的输出并附上说明。还提供精确的 MySQL 版本。
标签: mysql sql group-by window-functions