如何解决SQL按一个表分组,最大按另一个表分组
我有3个表ab
,bcd
和c
。现在,我想对a_id
表中的ab
进行分组,并从date
表中选择最大c
。这是我到目前为止尝试过的:
select ab.a_id,bcd.d_id,c.val,max(c.date) as date
from tableab ab,tablebcd bcd,tablec c
where ab.b_id = bcd.b_id
and bcd.c_id = c.c_id
group by ab.a_id
它可以正常工作,但不能给出正确的结果。我不太了解SQL,所以我可能缺少一些简单的东西。感谢您的帮助!
解决方法
从现有查询开始,一种简单的方法是row_number()
(仅在MySQL 8.0中可用)。
select *
from (
select
ab.a_id,bcd.d_id,c.val,row_number() over(partition by ab.a_id order by c.date desc) as rn
from tableab ab
iner join tablebcd bcd on ab.b_id = bcd.b_id
inner join tablec c on bcd.c_id = c.c_id
) t
where rn = 1
row_number()
通过将a_id
降序对具有相同date
的记录进行排名-然后,您可以使用此信息来过滤表。
请注意,我将查询重写为使用标准的显式联接,而不是老式的隐式联接(在from
子句中使用逗号):几十年前的这种语法不应在新代码中使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。