mysql分组查询

在MySQL中,查询流程主表和流程记录表以获取每个流程的最新记录时,遇到了挑战。Oracle支持分组排序函数,但MySQL需要采用不同的策略。文章介绍了两种方法:一种是通过自关联查询和LEFT JOIN,但存在并发问题;另一种是利用ORDER BY和LIMIT分组,但这可能因MySQL的bug导致错误。作者期待更优解决方案。
摘要由CSDN通过智能技术生成

业务场景:

流程主表和流程记录表,查询出流程中每个流程以及流程最新的记录

如果是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

写在后面:菜鸟一枚,各位大佬有更好的方法,还望不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值