2010-08-10 230 views
2

可能重複:
SQL Server: Only last entry in GROUP BYSQL:GROUP BY記錄,然後從每個組中獲取最後一條記錄?

我有這樣的一個表:

id| name | attendence 
1 | Naveed| 1 
2 | Naveed| 1 
3 | Adil | 1 
4 | Adil | 1 

我用下面的查詢:

SELECT * FROM `test` WHERE `attendence`=1 GROUP BY name 

上面的查詢結果:

id| name | attendence 
3 | Adil | 1 
1 | Naveed | 1 

問:

以上內容由名稱結果分組行,但顯示各組第一行。我想從每個組中選擇最後一行(通過id)。

例如:

id| name | attendence 
2 | Naveed | 1 
4 | Adil | 1 

如何編寫上述結果的查詢。

感謝

+0

不'SELECT * FROM測試WHERE考勤= 1 GROUP BY name'拋出誤差Δθ – egrunin 2010-08-10 14:48:14

+0

@egrunin:假設NAVEED正在使用MySQL:http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html – 2010-08-10 15:05:31

+0

http://php.azerot.com/sql -group-by-get-last-record-from-each-group/ 這是你的問題的答案相同的問題 – syraz37 2012-03-30 07:21:20

回答

9
SELECT a.* 
FROM test a 
WHERE a.attendence = 1 
AND NOT EXISTS (select 1 from test where name = a.name and id > a.id and attendence = 1) 
GROUP BY name 

甚至可能不會再被需要的羣體。

+0

它工作。謝謝。 – NAVEED 2010-08-11 05:04:21

0

使用以下查詢:

SELECT * FROM `test` WHERE `attendence`=1 GROUP BY name ORDER BY `id` DESC LIMIT 1 

這隻會選擇符合最高的ID的標準行。

+0

它只給我一個記錄。 Order By在Group By之後應用。 – NAVEED 2010-08-10 14:12:01

+0

是的,它只給你一個記錄。這是限制1的目的。你說過你只想要最後一行。這將只給你基於id的最後一行。如果您仍想要返回所有行,請取下短語「LIMIT 1」。 – Joseph 2010-08-10 14:16:47

+0

你不明白我的問題。我想獲得所有組,但每個組應由該組的最後一行代表。 – NAVEED 2010-08-10 14:18:40

4
SELECT MAX("id"), "name" FROM "test" WHERE "attendence" = 1 GROUP BY "name" 
1
SELECT Name, Max(ID) FROM table WHERE attendance = 1 GROUP BY Name 
相關問題