实时数据表聚合 - 15分钟分组,非整数时间点
要创建一个实时数据表,可以使用以下SQL语句:
CREATE TABLE real_time_data (
id INT AUTO_INCREMENT PRIMARY KEY,
tag_id INT,
real_time TIMESTAMP,
real_value FLOAT
);
为了每两秒写入一组数据,可以使用定时任务或者触发器来实现。具体实现方式取决于你使用的数据库类型和工具。
要按15分钟为一组聚合,并且时间不能为00、15、30等整数,而是按照起始时间累加15分钟进行分组,可以使用以下SQL语句:
SELECT
DATE_FORMAT(real_time, '%Y-%m-%d %H:') + FLOOR(MINUTE(real_time) / 15) * 15 AS start_time,
MAX(real_value) AS max_value,
MIN(real_value) AS min_value,
AVG(real_value) AS avg_value
FROM
real_time_data
WHERE
MOD(MINUTE(real_time), 15) != 0
GROUP BY
start_time
ORDER BY
start_time;
这段SQL语句使用DATE_FORMAT函数将时间格式化为%Y-%m-%d %H:的形式,然后将分钟数除以15并乘以15来获取起始时间。使用MAX、MIN和AVG函数分别计算每个分组的最大值、最小值和平均值。使用WHERE子句来过滤掉分钟数为00、15、30等整数的数据。最后使用GROUP BY子句将分组聚合,并使用ORDER BY子句按照起始时间排序结果。
原文地址: https://www.cveoy.top/t/topic/p9v1 著作权归作者所有。请勿转载和采集!