使用场景
现场的A设备有100个采集点,但是这100个采集点的采集频率是不同的,这些采集的数据都会实时传输到mysql数据库。需求是:查询出A设备这100个采集点的最新数据。
模拟真实数据
数据库表
1 | DROP TABLE IF EXISTS `service_values_today`; |
插入数据
1 | INSERT INTO `service_values_today` (`ID_DEVICE`, `ID_SERVICE`, `TAG_NAME`, `DATE_TIME`, `PV`, `EU`) VALUES ('ooxxooxx', 'ooxxooxx\\InletPressure', '进口压力', '2017-08-10 13:47:24', '0', NULL); |
实现查询
1 | select * from (SELECT * from service_values_today where ID_DEVICE = 'ooxxooxx' ORDER BY DATE_TIME desc limit 500 ) tempData GROUP BY ID_SERVICE; |
首先要对 DATE_TIME 进行降序排序(当然这里的 limit 500 可能会不精确。因为有可能在500条数据内全部都是采集频率快的数据)。
然后再根据这个结果集进行 GROUP BY 分组。
查询结果
查询前200条1
SELECT * from service_values_today where ID_DEVICE = 'ooxxooxx' ORDER BY DATE_TIME desc limit 200;
查询分组的最新数据1
select * from (SELECT * from service_values_today where ID_DEVICE = 'ooxxooxx' ORDER BY DATE_TIME desc limit 500 ) tempData GROUP BY ID_SERVICE;