Mysql 查询多(N)条重复数据,想要获取这些重复数据最近一条(有创建时间字段) 利用 ORDER BY + GROUP BY

目录

问题?

最近遇到个需要获取A、B两个表的差集,他们的差集可以利用LEFT JOIN 或者其他的连接方式去获取差集,但是有个问题:A表中的记录是有个业务需要判断最近一条记录的状态,需要是状态合格的,但是A表的数据是重复的;

1.差集

2.查询一个值的最近一条记录

3.查询N个值的最近一条记录

结 


问题?

最近遇到个需要获取A、B两个表的差集,他们的差集可以利用LEFT JOIN 或者其他的连接方式去获取差集,但是有个问题:A表中的记录是有个业务需要判断最近一条记录的状态,需要是状态合格的,但是A表的数据是重复的;

1.差集

通过以下操作可以查询出差集。。。but 还没拿到重复数据的最近一条记录

SELECT * FROM A LEFT JOIN  B ON A.code = B.code  WHERE B.id IS NULL

2.查询一个值的最近一条记录

于是想到了最常用的,ORDER BY 通过排序可以利用 创建时间字段来排序+LIMIT 这样就可以获取到最近一条 (但是这个只是适用于查询一个code数据的操作)

SELECT * FROM A LEFT JOIN  B ON A.code = B.code  WHERE B.id IS NULL ORDER BY A.create_time LIMIT 1

3.查询N个值的最近一条记录

最后想到了ORDER BY + GROUP BY (ORDER BY 排序可以让时间倒序,GROUP BY 可以分组让我们根据code分组获取他们最近一条数据)

SELECT * FROM (SELECT * FROM (SELECT * FROM A LEFT JOIN  B ON A.code = B.code  WHERE B.id IS NULL ORDER BY A.create_time) test) AB WHERE AB.Status = '正常'

结 

(查询出差集,ORDER BY 让创建时间倒序)把这个结果当作一个结果集 test)利用结果集进行对重复数据去重GROUP BY分组之后再当做结果集 AB) 因为还有一个状态需要判断 AB = '正常'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值