选择将DISTINCT应用于仅一个特定字段的许多字段

San*_*ira 1 sql sql-server

在SQL Server中,如何选择多个字段(没有agregation函数)并将DISTINCT语句仅应用于一个特定字段?

例如:如果我有一个用于存储用户操作的表,则伪模式将如下所示:

UserActions
------------
id,
User,
Action
insertDate
Run Code Online (Sandbox Code Playgroud)

我想在不重复"Action"字段的情况下获取给定用户的最新操作?

例如,如果表格内容是:

1, john, update, 01/01/09
2, john, update, 01/02/09
3, john, update, 01/03/09
4, john, delete, 01/04/09
5, john, insert, 01/05/09
6, john, delete, 01/06/09
Run Code Online (Sandbox Code Playgroud)

我想得到:

6, john, delete, 01/06/09
5, john, insert, 01/05/09
3, john, update, 01/03/09
Run Code Online (Sandbox Code Playgroud)

提前谢谢了.

tva*_*son 5

内部查询应为用户'john'选择每个操作的最大ID,外部查询将选择与内部查询中的id集合匹配的那些记录,因此您应该只获取指定用户的每个操作的最后一个.

select id, user, action, insertDate
from userActions
where id in (select max(id)
                 from userActions
                 where user ='john'
                 group by action)
Run Code Online (Sandbox Code Playgroud)