Игнорирование ОП не требует агрегатных функций (все еще не знаю, почему ...)
Вопрос, который я имею с данным ответом:
- Это не динамично, чтобы разрешить для любого другого пользователя - скажем, «Марк»
- предполагается, что max (id) для действия будет соответствовать последнему действию - тестовые данные предполагают это, но я бы не принял это как правило.
так что с учетом этого необходимо построить более динамический запрос
с добавлением еще 2 строк к тестовым данным
7, john, update, 04/01/09
8, mark, insert, 01/02/09
ответ не дает того, чего хотел ОП
Вот мой первый черновик быстро - позже приберусь
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
Обновление ....
2-я версия использует идентификатор, чтобы получить отдельную строку, в которой может быть несколько событий определенного пользователя, т. Е. Если у тестовых данных также была следующая строка
9, john, delete, 06/01/09
тогда вам нужно будет выбрать между идентификатором строки 6 и идентификатором строки 9, какой из них вернуть. Я произвольно решил использовать max (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