目录

问题?

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

1.差集

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

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


问题?

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

1.差集

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

SELECT * FROM A LEFT JOINB ON A.code = B.codeWHERE B.id IS NULL

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

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

SELECT * FROM A LEFT JOINB ON A.code = B.codeWHERE 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 JOINB ON A.code = B.codeWHERE B.id IS NULL ORDER BY A.create_time) test) AB WHERE AB.Status = '正常'

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