MySQL window 函数每 5 分钟计算一次平均值或最大值
MySQL window function to calculate averages or maximums every 5 minutes
我有一个 table data
列 clock
(unixtime) 和 value
,记录每 50-70 秒出现一次。我需要绘制反映每 5 分钟时间的最大值(或平均值)的月度图表。为此,我需要进行一个查询,每 5 分钟对值进行一次分组和计数。但是我就是做不到。
SELECT clock, value FROM data WHERE clock BETWEEN 1622667600 AND 1625259600
(示例时钟)return 这个:
如何将其按 5 行或 300 秒分组,以获得如下结果(例如,最多 5 行)?
- 1622667879 - 94691016
- 1622668182 - 43543688
- 1622668479 - 42904552
- 1622668781 - 41118136
- 1622669079 - 47856848
五分钟还有300秒。所以你可以使用算术来聚合结果:
SELECT (FLOOR(clock / 300) * 300) as period_start,
MIN(clock), MAX(clock), AVG(value)
FROM data
WHERE clock BETWEEN 1622667600 AND 1625259600
GROUP BY FLOOR(clock / 300);
我不知道你是否想要 WHERE
子句,但我把它留在里面了。
我有一个 table data
列 clock
(unixtime) 和 value
,记录每 50-70 秒出现一次。我需要绘制反映每 5 分钟时间的最大值(或平均值)的月度图表。为此,我需要进行一个查询,每 5 分钟对值进行一次分组和计数。但是我就是做不到。
SELECT clock, value FROM data WHERE clock BETWEEN 1622667600 AND 1625259600
(示例时钟)return 这个:
如何将其按 5 行或 300 秒分组,以获得如下结果(例如,最多 5 行)?
- 1622667879 - 94691016
- 1622668182 - 43543688
- 1622668479 - 42904552
- 1622668781 - 41118136
- 1622669079 - 47856848
五分钟还有300秒。所以你可以使用算术来聚合结果:
SELECT (FLOOR(clock / 300) * 300) as period_start,
MIN(clock), MAX(clock), AVG(value)
FROM data
WHERE clock BETWEEN 1622667600 AND 1625259600
GROUP BY FLOOR(clock / 300);
我不知道你是否想要 WHERE
子句,但我把它留在里面了。