SQL:GROUP BY记录,然后从每个组中获取最后一条记录?
问题描述:
我有这样的表:
id| name | attendence
1 | Naveed| 1
2 | Naveed| 1
3 | Adil | 1
4 | Adil | 1
我使用以下查询:
I use following query:
SELECT * FROM `test` WHERE `attendence`=1 GROUP BY name
以上查询的结果:
The result with above query:
id| name | attendence
3 | Adil | 1
1 | Naveed | 1
问题:
以上结果组按名称排序,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。
Question:
Above result group rows by name but show first row from each group. I want to select last row(by id) from each group.
例如:
For example:
id| name | attendence
2 | Naveed | 1
4 | Adil | 1
如何为上述结果编写查询。
How to write query for above result.
感谢
Thanks
答
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
可能不再需要该群组了。
Might not even need the group by anymore.