Я новичок в SQL.В таблицу вставлены неверные данные.В таблице представлены товары, которые приобрел пользователь.txId - это идентификатор, сгенерированный при покупке.Предполагается, что каждая комбинация элемент / пользователь имеет одинаковый txId.
id | item | user | txId | date (ms)
-----------------------------------------------
1 | cup | bob | 10 | 1000000
2 | cup | bob | -1 | 1000000
3 | cup | bob | 10 | 1000000
4 | cup | jim | -1 | 2000000
5 | hat | bob | 10 | 1000000
6 | pen | tom | -1 | 3000000
7 | pen | tom | -1 | 3000000
8 | pen | tom | 13 | 3000000
9 | shoe | bob | 10 | 1000000
10 | hat | dan | -1 | 4000000
11 | hat | dan | -1 | 4000000
Я пытаюсь найти все группы предметов / sku, у которых txId равен -1 И другой допустимый txId (который не равен -1).Меня не волнует строка 4, поскольку cup / jim - это всего лишь 1 строка элемента / пользователя.В строке 5/9 также имеется только 1 строка для элемента / группы пользователей.В строке 10/11 нет действительного идентификатора транзакции, поэтому я тоже не хочу их.
Я хочу, чтобы мои результаты были:
id | item | user | txId | date (ms)
-----------------------------------------------
1 | cup | bob | 10 | 1000000
2 | cup | bob | -1 | 1000000
3 | cup | bob | 10 | 1000000
6 | pen | tom | -1 | 3000000
7 | pen | tom | -1 | 3000000
8 | pen | tom | 13 | 3000000
Вот что я пробовал
select groups.id, groups.item, groups.user, groups.txId, groups.date
from (
SELECT
*
FROM (
SELECT
*
, COUNT(*) OVER (PARTITION BY item, user) AS occurrences
FROM myTable tbl
) t
WHERE t.occ > 1
) groups
INNER JOIN
(
SELECT * FROM myTable WHERE txId = -1
) violators
ON violators.user = groups.user AND violators.item = groups.item
ORDER BY groups.user, groups.item DESC
Я получаю некоторые ложные срабатывания и не могу понять, почему,