上图是数据,相同的单号存在多条扫码记录,由于数据是异步多线程获取的ID值不能代表先后顺序,需要通过判断时间来选择数据
有以下方式
#第一种方式 通过左连接方式
SELECT
s.*
FROM
( SELECT max( 添加时间 ) AS 添加时间 FROM `scanData` as b GROUP BY `面单编号` ) as t
LEFT JOIN `scanData` AS s ON t.添加时间 = s.添加时间
ORDER BY s.`添加时间` DESC;
#第二种 通过组合查询
SELECT
a.*
FROM
scanData AS a,
( SELECT max( 面单编号 ) AS 面单编号, max( 添加时间 ) AS 添加时间 FROM scanData AS b GROUP BY 面单编号 ) AS b
WHERE
a.面单编号 = b.面单编号 AND a.添加时间 = b.添加时间
ORDER BY a.`添加时间` DESC;
下面是执行结果,发现左连接方式需要0.027s 组合方式只需要0.005s
百度搜索的时候有其他同志说左连接效率更高的说法有些问题,特此记录