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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值