Пропустить запись WHERE ROW_NUMBER () = X и соответствующую запись = 'Y' - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть таблица с 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 после того, как будут обработаны все ограниченные строки.

1 Ответ

0 голосов
/ 19 февраля 2020

если третье действие пользователя - A, я должен пропустить его

Обратите внимание:

select 
    row_number() over(partition by user order by id) rn,
    activity,
    user
from (
    select 
        t.*,
        row_number() over(partiton by user order id) rn
    from mytable t
) t
where not (rn = 3 and activity = 'A')

Обратите внимание, что для этого вам нужен столбец, который можно использовать для сортировки записей - я предположил столбец id.

...