1

我有一个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服务器如果重要的话。谢谢。

4

2 回答 2

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

Gordon 的回答是正确的并且代码更少,但我更喜欢创建一个临时表。其他开发人员更清楚我在做什么。

于 2013-02-15T20:13:54.877 回答
0

要得到你想要的:

select t.*
from (select tbl.*,
             row_number() over (partition by fk order by dateof desc) as seqnum
      from tbl
     ) t
where seqnum = 1

这假设您正在使用具有窗口函数的合理数据库。您没有在问题中指定数据库。

于 2013-02-15T20:14:11.890 回答