SQL: GROUP BY records and then get last record from each group? [duplicate]

 ̄綄美尐妖づ 提交于 2019-12-01 07:45:51

问题


Possible Duplicate:
SQL Server: Only last entry in GROUP BY

I have a table like this:

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

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


回答1:


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.




回答2:


SELECT MAX("id"), "name" FROM "test" WHERE "attendence" = 1 GROUP BY "name"



回答3:


SELECT Name, Max(ID) FROM table WHERE attendance = 1 GROUP BY Name



回答4:


Use the following query:

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

That will only select the row that meets the criteria with the highest id.



来源:https://stackoverflow.com/questions/3449757/sql-group-by-records-and-then-get-last-record-from-each-group

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!