MySQL 查询每个人的最新一条记录 group by + order by?

需求

查询一批人的数据, 并只取每个人最近的一条

  • 有可能有的人没有数据集
  • 有可能有的人有多跳数据

思路

原本是这样想的查询出这批人的数据然后排个序, 然后再按personId聚合到一起, 取第一个
结果并不是想象中的这样的…
order by 不生效
好像是MySQL 5.7之后的版本sql语句优化改了

查询语句

select t.person_id, t.evaluation_time from (
 select  person_id, evaluation_time from evaluation_risk_statistic s where s.person_id in (
     'p170807171522173', 'p160504081110285', 'p180117173210001', 'p160307185810006'
     ) order by s.evaluation_time desc
 ) as t
group by t.person_Id;

查询结果

MySQL 查询每个人的最新一条记录 group by + order by?_第1张图片

正确做法

按personId取每个人最新的数据

查询条件

SELECT t1.*
FROM evaluation_risk_statistic AS t1
INNER JOIN
(
SELECT t2.person_id, MAX(t2.evaluation_time) AS maxdate
FROM evaluation_risk_statistic AS t2
where t2.person_id in (
         'p170807171522173', 'p160504081110285', 'p180117173210001', 'p160307185810006'
         )
GROUP BY t2.person_id
) AS t3 ON t1.person_id = t3.person_id AND t1.evaluation_time = t3.maxdate;

查询结果

MySQL 查询每个人的最新一条记录 group by + order by?_第2张图片

你可能感兴趣的:(数据库,MySQL)