忽略 OP 不需要聚合函数(仍然不确定为什么......)
给定答案的问题是:
- 允许任何其他用户不是动态的 - 比如说“标记”
- 它假定一个动作的 max(id) 将匹配最新的动作 - 测试数据表明这一点,但我不认为这是一个规则。
因此,考虑到这些,需要构建更动态的查询
向测试数据添加了另外 2 行
7, john, update, 04/01/09
8, mark, insert, 01/02/09
答案没有给出 OP 想要的内容
这是我的初稿 - 稍后会整理
select
userActions.id,
userActions.[user],
userActions.Action,
userActions.insertDate
from
userActions
join
(
select
[user], action, max(insertdate) as maxinsertdate
from userActions
group by
[user], action
) aggsubquery
on userActions.[user] = aggsubquery.[user]
and userActions.action = aggsubquery.action
and userActions.insertdate = aggsubquery.maxinsertdate
更新....
第二个版本使用 ID 获取不同的行,其中特定用户可能多次执行操作,即如果测试数据也有以下行
9, john, delete, 06/01/09
那么您需要在第 6 行和第 9 行之间决定要返回哪一个。我随意选择使用max(id),因为我猜数据很重要而不是行id
select
max(userActions.id) as id,
userActions.[user],
userActions.Action,
userActions.insertDate
from
userActions
join
(
select
[user], action, max(insertdate) as maxinsertdate
from userActions
group by
[user], action
) aggsubquery
on userActions.[user] = aggsubquery.[user]
and userActions.action = aggsubquery.action
and userActions.insertdate = aggsubquery.maxinsertdate
group by
userActions.[user],
userActions.Action,
userActions.insertDate