问题描述:
在开发过程中经常遇到从某一操作记录表 中查出每一个用户的最新的一条记录。
解决方法:
1、首先按照时间降序 ,然后再按照ID分组
select * from
( select * from A order by date desc)as a
group by a.id
这样查询结果并不会得到想要的结果,因为mysql 5.7之后的子查询里就默认不会使用排序,如果想要子查询使用排序,则可以加上limit限制条件
select * from
( select * from A order by date desc limit 1000)as a
group by a.id
这样的操作是可以的,但是limit后面跟的数字应当大一点,如果数据比较多,就很尴尬 可能查不全
2、首先按照id分组,查询出最大日期值,然后进行外连接, 最后去重
SELECT DISTINCT * from A as a
INNER JOIN
(
SELECT MAX(date_from) as date_from A GROUP BY ID
) as b
on
a.date_from=b.date_from
GROUP BY
ID
注意,group by的查询字段 只能是聚合函数 或者主键 或者 group by 的对象,所以这么操作就可以查询出来