前言
怎么获取Mysql表中同一标识(flag)下多条记录的最新记录呢?这里的宗旨是先order by time desc,其查询结果作为一个父表,然后再在父表中进行group by flag;这里值得注意的是,如果order by 与 group by在同一维表中的话,group by应该放在order by之前。
SQL示例
- 对于多张维表
select task.*
from task_info task
left join(
select *
from(
select *
from task_status
order by create_datetime desc) t
group by t.task_id) status on task.id = status.task_id
where
locate(status.task_status, #{
taskStatus}) > 0
order by task.create_datetime, task.id desc
- 对于单张维表
select sub_talent_pool.*
from (select * from pool
where plan = #{
plan}
order by modify_time desc) sub_talent_pool
group by sub_talent_pool.tree_structure_id, sub_talent_pool.into_pool_time
order by sub_talent_pool.into_pool_time desc
总结
总而言之,子查询的按时间倒序的结果作为父表,外层查询再进行分组即可获取最新记录。