业务场景:
流程主表和流程记录表,查询出流程中每个流程以及流程最新的记录
如果是oracle中是支持分组排序函数的:
# 以部门分组按照员工编号倒叙排序的方式查询出姓名,性别年龄
select row_number() over(partition by deptno order by empno desc) name,sex,age;
mysql中解决办法
方法一:
自关联查询出流程记录表中的最近一条记录,然后关联流程主表
SELECT
t2.*
FROM
( SELECT 流程id, MAX( created_date ) created_date FROM 流程记录表 GROUP BY 流程id) t1
LEFT JOIN 流程记录表 t2 ON t2.流程id= t1.流程id
AND t2.created_date = t1.created_date
)
缺陷:当两个最新的记录是在同一时间产生,这种写法会出问题
方法二:
先按照创建时间排序后分组,注意limit后面要尽可能的大,这里是mysql的一个bug
SELECT * from( SELECT * FROM 流程记录 ORDER BY created_date DESC LIMIT 999999 ) temp GROUP BY temp.流程id
写在后面:菜鸟一枚,各位大佬有更好的方法,还望不吝赐教。