Как найти дублирующиеся подряд записи по признаку?
Добавлено: 2018.09.28, 08:52
Добрый день,
Есть такая структура таблицы orders
Записи:
Нужно, чтобы заселектились записи только те, в которых предыдущие записи с такими же user_id имеют эквивалентный product_id.
Т.е. в данном случае вытащатся только с id 7 и 8
Есть 2 не совсем рабочих варианта:
1) Возвращает нужные записи с дубликатами, а дубликаты не нужны.
2) Возвращает все, у которых были раннее эквивалентные записи, но тут не соблюдается, что запись для текущего пользователя по условию должна быть предыдущей.
Подскажите - как решить мою проблему?
Есть такая структура таблицы orders
- id
user_id
product_id
Записи:
Код: Выделить всё
id user_id product_id
1 1 2
2 2 2
3 2 3
4 2 4
5 1 2
6 1 5
7 1 5
8 1 5
Т.е. в данном случае вытащатся только с id 7 и 8
Есть 2 не совсем рабочих варианта:
1) Возвращает нужные записи с дубликатами, а дубликаты не нужны.
Код: Выделить всё
select * from your_table
INNER JOIN (
SELECT user_id, product_id
FROM your_table
GROUP BY user_id, product_id
HAVING COUNT(id) > 1
) as m ON m.user_id = your_table.user_id AND m.product_id = your_table.product_id
Код: Выделить всё
SELECT
id
FROM
orders outerO
WHERE
EXISTS (
SELECT
*
FROM
orders innerO
WHERE
innerO.user_id = outerO.user_id
AND innerO.product_id = outerO.product_id
AND innerO.id < outerO.id
);