一、实现效果:
蓝牙mac字段是相同的记录,排在一起,再按时间倒序,总体时间来说也需要倒序
二、SQL编写:
最开始的想法就是,那我直接按mac和时间排序不就好了
SELECT * FROM aca_be_lpresult ORDER BY mac DESC, update_date DESC
但是实际业务会有这样的的情况
1、同一个mac的记录,可能出现在不同的时间点
2、同一个时间点,可能有不同的mac记录
所以结果如下,两边都会出现乱序
同事提出为什么不先分组再排序呢,在认真解读这句话之后,我尝试看看
实现思路:
先写一个分组的SQL,按Mac分组,时间最大的排在前面,因为Mac是多个的,所以被分组的时间就取最大的即可
SELECT mac, COUNT( 1 ) AS count, MAX( update_date ) AS latest_date FROM aca_be_lpresult GROUP BY mac ORDER BY MAX( update_date ) DESC
结果如下:
将这个分组的结果和主表进行相联:
SELECT a.* FROM aca_be_lpresult AS a JOIN ( SELECT mac, COUNT( 1 ), MAX( update_date ) AS ud FROM aca_be_lpresult GROUP BY mac ORDER BY MAX( update_date ) DESC ) AS b ON a.mac = b.mac
可以发现和直接查询主表没有任何差别 ...
此时我想起来可以先按分组表的顺序排序, 再按主表的顺序就实现了效果
最终SQL:
SELECT a.* FROM aca_be_lpresult AS a JOIN ( SELECT mac, COUNT( 1 ), MAX( update_date ) AS ud FROM aca_be_lpresult GROUP BY mac ORDER BY MAX( update_date ) DESC ) AS b ON a.mac = b.mac ORDER BY b.ud DESC, a.update_date DESC
标签:记录,MAX,update,mac,MySQL,date,倒序,SELECT,DESC From: https://www.cnblogs.com/mindzone/p/17749725.html