group by 查找订单的最新状态 join


Order:sn
Procedures:sn,status
1、 有订单表和流程表。
订单表含有订单的详细信息【假设没有订单状态哈】,每个订单有好多种状态:已付款、处理中、待收货等等。现在的需求可能是查询订单状态是待收货的所有订单的信息。
【答】先找到最新状态是待收货的所有订单,然后和订单表做一个left join,就可以得到了。
一、 先找最新状态是待收货的所有订单。
本来拍脑袋一想是group by order by 取第一条,然后试了一下,发现group by取回来的并不是最新状态的,而是分组后的第一条。这是因为在MySQL中语句的执行顺序是先执行group by 然后执行order by .很明显这就不可能得到最新的一条了。我们可以这样查出每个订单的最新状态
select sn,max(status) from procedures group by sn .
正确的是下面的写法,自己和自己做个join,最后再和order join。
SELECT a.id, a.sn, a.created_at,a.type FROM (SELECT sn, max(created_at) created_at FROM procedures GROUP BY sn ) b JOIN procedures a ON a.sn = b.sn AND a.created_at = b.开发云主机域名created_at where a.type=11select c.*,tmp.type from complaints as c right join (
SELECT a.id, a.sn, a.created_at,a.type FROM (SELECT sn, max(created_at) created_at FROM procedures GROUP BY sn ) b JOIN procedures a ON a.sn = b.sn AND a.created_at = b.created_at where a.type=11
) as tmp on tmp.sn=c.sn

相关推荐: mysql 分组后筛选

分组后筛选的条件,是在一级筛选的结果上再做筛选,就放在最后,如果筛选和一级筛选的结果无关,则放在中间分组函开发云主机域名数做条件,肯定是分组后筛选#案例1:查询哪个部门的员工个数>2#:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/09 13:13
下一篇 06/09 13:13

相关推荐