MySQL дублированные строки в группе на основе выбранных столбцов

0

Скажем, у меня есть таблица a

id sequence card_tap time
1    1         61      1
1    2         62      10 
1    3          2      20
2    11        12       5
2    12        61       10
2    12        62       20

Я хочу найти дублированную sequence в пределах каждого id группы (ид они существуют), в этом случае

id sequence card_tap time
2    12        61       10
2    12        62       20

Могу ли я спросить, как это сделать, желательно быстро, так как у меня большой набор данных.

Теги:
database
duplicates
group-by

3 ответа

0
Лучший ответ

Dunno, как быстро это может быть, не может понять, как это сделать, без агрегации по id/sequence.

SELECT id, sequence, count (*) как n_rows

Из

GROUP BY id, последовательность

HAVING n_rows> 1

0

Изменение: Упс, упустил неединственность идентификатора, исправлено.

Это были бы мои первые инстинкты:

SELECT *
FROM the_table
WHERE (id, sequence) IN (
      SELECT id, sequence 
      FROM the_table 
      GROUP BY id, sequence 
      HAVING COUNT (*) > 1
   );

или же

SELECT *
FROM the_table AS t
INNER JOIN (
    SELECT id, sequence 
    FROM the_table 
    GROUP BY id, sequence 
    HAVING COUNT (*) > 1
) AS s USING (id, sequence)
;

Лично я сначала пошел с JOIN, по моему опыту они лучше могли использовать индексы... если бы у вас был один (id, sequence).

0

Использовать in:

select t.*
from t
where (t.id, t.sequence) in (select t2.id, t2.sequence
                             from t t2
                             group by t2.id, t2.sequence
                             having count(*) > 1
                            );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню