Как найти дублирующиеся подряд записи по признаку?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
EVOSandru6
Сообщения: 603
Зарегистрирован: 2014.07.04, 13:33

Как найти дублирующиеся подряд записи по признаку?

Сообщение EVOSandru6 » 2018.09.28, 08:52

Добрый день,

Есть такая структура таблицы 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
Нужно, чтобы заселектились записи только те, в которых предыдущие записи с такими же user_id имеют эквивалентный product_id.

Т.е. в данном случае вытащатся только с 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
2) Возвращает все, у которых были раннее эквивалентные записи, но тут не соблюдается, что запись для текущего пользователя по условию должна быть предыдущей.

Код: Выделить всё

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
  );
Подскажите - как решить мою проблему?

andku83
Сообщения: 931
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как найти дублирующиеся подряд записи по признаку?

Сообщение andku83 » 2018.09.28, 12:09

А какова конечная цель этой выборки? Случайно не удаление дубликатов?

EVOSandru6
Сообщения: 603
Зарегистрирован: 2014.07.04, 13:33

Re: Как найти дублирующиеся подряд записи по признаку?

Сообщение EVOSandru6 » 2018.09.28, 16:10

andku83 писал(а):
2018.09.28, 12:09
А какова конечная цель этой выборки? Случайно не удаление дубликатов?
Нет, просто фильтр таких записей

andku83
Сообщения: 931
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как найти дублирующиеся подряд записи по признаку?

Сообщение andku83 » 2018.09.28, 18:36

Код: Выделить всё

GROUP BY user_id, product_id
ну и если id - суррогатный ключ, тогда он там лишний, а primary можно сделать составным и тогда дублей не будет.

Ответить