2011-12-07 35 views
1

我有一个表(表1):MySQL的 - 最新行使用GROUP BY

ID INSERTDATE ISSUE SOURCE 
1 2011-12-01 A  EMAIL 
2 2011-12-02 B  POST 
3 2011-12-03 C  MEETING 
4 2011-12-04 B  INTERNET 

我希望得到每个问题的最新源...

SELECT * FROM table1 GROUP BY SOURCE ORDER BY ISSUE ASC 

结果

ID INSERTDATE ISSUE SOURCE 
1 2011-12-01 A  EMAIL 
2 2011-12-02 B  POST 
3 2011-12-03 C  MEETING 

但是我怎么能得到以下内容,以便问题B有最新的来源?

ID INSERTDATE ISSUE SOURCE 
1 2011-12-01 A  EMAIL 
4 2011-12-04 B  INTERNET 
3 2011-12-03 C  MEETING 

回答

1

命令你需要一个聚集和自加盟。
这是标准的SQL不依靠MySQL的组通过扩展(其中are rubbish

SELECT 
    t.* 
FROM 
    (-- get most recent ID per issue 
    SELECT MAX(ID) AS MaxID, ISSUE 
    FROM table1 
    GROUP BY ISSUE 
    ) t2 
    JOIN -- join back to get the whole row 
    table1 t ON t2.MaxID = t.ID 

编辑,注释之后。假设一个改变天只有

SELECT 
    t.* 
FROM 
    (-- get most recent INSERTDATE per issue 
    SELECT MAX(INSERTDATE) AS MaxINSERTDATE, ISSUE 
    FROM table1 
    GROUP BY ISSUE 
    ) t2 
    JOIN -- join back to get the whole row 
    table1 t ON t2.MaxINSERTDATE = t.ID 
+0

我无法确保最高的ID是最新的问题......它必须由insertdate – craig1231

+0

确定如果您在同一天有2个ID? – gbn

+0

在我现实世界的问题中,它确实有一段时间。我不能详细说明我的真实世界问题,出于安全原因;) – craig1231

-1

我想你应该INSERTDATE(也许,ISSUE)

SELECT * FROM table1 GROUP BY SOURCE ORDER BY INSERTDATE DESC 
+0

虽然这种技术的工作原理,它通过事故不是由设计。 –