mysql 选择重复数据时,选择时间最近的条目 多种方法分析

mysql 选择重复数据时,选择时间最近的条目 多种方法分析_第1张图片

上图是数据,相同的单号存在多条扫码记录,由于数据是异步多线程获取的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 

百度搜索的时候有其他同志说左连接效率更高的说法有些问题,特此记录

mysql 选择重复数据时,选择时间最近的条目 多种方法分析_第2张图片

你可能感兴趣的:(mysql)