我有一个包含三列的表tbl
:
id | fk | dateof
1 | 1 | 2012-01-01
2 | 1 | 2012-01-02
3 | 2 | 2012-02-01
4 | 2 | 2012-03-01
5 | 3 | 2012-04-01
id
是行的ID,fk
是另一个表的外键,dateof
是日期列。
我想要的是id
获取dateof
最新的fk
分组。我尝试了什么:
SELECT id, MAX(dateof) FROM tbl GROUP BY fk
但我得到的结果如下:
1 | 2012-01-02
3 | 2012-03-01
5 | 2012-04-01
我想要的时候:
2 | 2012-01-02
4 | 2012-03-01
5 | 2012-04-01
如何查询并获取我正在寻找的结果? MySQL服务器是否重要。感谢。
答案 0 :(得分:4)
就我个人而言
SELECT id, tbl.dateof dateof
FROM tbl
INNER JOIN
(SELECT fk, MAX(dateof) dateof
FROM tbl
GROUP BY fk) temp
ON tbl.fk = temp.fk AND tbl.dateof = temp.dateof
戈登的答案是正确的,代码较少,但我更喜欢创建临时表。其他开发人员对我正在做的事情更清楚。
答案 1 :(得分:0)
获得你想要的东西:
select t.*
from (select tbl.*,
row_number() over (partition by fk order by dateof desc) as seqnum
from tbl
) t
where seqnum = 1
这假设您使用的是具有窗口函数的合理数据库。您没有在问题中指定数据库。