【MySQL】 将字段相同的记录排在一起,按时间倒序

发布时间 2023-10-08 20:52:43作者: emdzz

一、实现效果:

蓝牙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