У меня есть таблица с ROW_NUMBER (), разделенная на пользователя:
Row|Activity|User
-----------------
1 |A |Jeff
2 |A |Jeff
3 |A |Jeff
1 |A |Bob
2 |B |Bob
3 |C |Bob
1 |A |Sam
2 |B |Sam
3 |A |Sam
4 |D |Sam
Я хотел бы пропустить, во время подсчета строк, запись 3 для Джеффа и Сэма, потому что если 3-е действие пользователя Я должен пропустить это. Я называю пропускаемые строки «ограниченными строками». По сути, я хочу получить эту таблицу в результате (без комментариев, очевидно):
Row|Activity|User
-----------------
1 |A |Jeff
2 |A |Jeff --3rd activity is A so it gets skipped
1 |A |Bob
2 |B |Bob
3 |C |Bob --3rd activity isn't A so it doesn't get skipped
1 |A |Sam
2 |B |Sam --3rd activity is A so it gets skipped
3 |D |Sam
Мой запрос:
SELECT ROW_NUMBER() OVER(PARTITION BY User) AS Row, Activity, User FROM Table1
WHERE [Filters]
AND User IN(SELECT User IN Table1
WHERE [Filters] --Same filters as above
GROUP BY User HAVING COUNT(User) > 1) --Let's call this the 'Minimum 1 Activity Filter'
Я собираюсь быть совершенно честным, сейчас я Не знаю, вызовет ли фильтр активности минимум 1 позже проблемы, то есть, если строка 2 также будет иметь ограничения. Из-за этого я предпочитаю идти по безопасному пути и представляю, что мне придется проверять фильтр минимальной активности 1 после того, как будут обработаны все ограниченные строки.