CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `value` float NOT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上是创建一个简单的数据表,包含三个字段:
- id:自增主键
- value:数据值
- time:数据时间
INSERT INTO `mytable` (`value`, `time`) VALUES (10, NOW()); INSERT INTO `mytable` (`value`, `time`) VALUES (20, NOW() - INTERVAL 5 MINUTE); INSERT INTO `mytable` (`value`, `time`) VALUES (30, NOW() - INTERVAL 10 MINUTE); INSERT INTO `mytable` (`value`, `time`) VALUES (40, NOW() - INTERVAL 15 MINUTE); INSERT INTO `mytable` (`value`, `time`) VALUES (50, NOW() - INTERVAL 20 MINUTE); INSERT INTO `mytable` (`value`, `time`) VALUES (60, NOW() - INTERVAL 25 MINUTE);
以上代码向数据表中插入了6条数据,value字段分别为10、20、30、40、50、60,时间间隔为5分钟,时间戳分别为现在、5分钟前、10分钟前、15分钟前、20分钟前、25分钟前。
SELECT DATE_FORMAT(time, '%Y-%m-%d %H:%i') AS time, SUM(value) AS total FROM mytable WHERE time BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW() GROUP BY DATE_FORMAT(time, '%Y-%m-%d %H:%i') ORDER BY time ASC;
以上是每半小时数据求和的关键语句。首先根据时间条件筛选出最近30分钟的数据,然后按照每半小时一个区间进行分组,在每个区间内求和,最后按照时间进行升序排序。输出结果如下:
+---------------------+-------+ | time | total | +---------------------+-------+ | 2021-10-27 11:15 | 10.0 | | 2021-10-27 11:20 | 30.0 | | 2021-10-27 11:25 | 60.0 | | 2021-10-27 11:30 | 90.0 | +---------------------+-------+
以上是MySQL每半小时数据求和的简单演示,通过这种方式可以对数据库中的数据进行快速统计和分析,方便实际生产中的应用。