我有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,所以我可能缺少一些简单的东西。感谢您的帮助!
答案 0 :(得分:1)
从现有查询开始,一种简单的方法是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
子句中使用逗号):几十年前的这种语法不应在新代码中使用。