2010-08-10 179 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 
相关问题