Скажем, у меня есть таблица 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
Могу ли я спросить, как это сделать, желательно быстро, так как у меня большой набор данных.
Dunno, как быстро это может быть, не может понять, как это сделать, без агрегации по id/sequence.
SELECT id, sequence, count (*) как n_rows
Из
GROUP BY id, последовательность
HAVING n_rows> 1
Это были бы мои первые инстинкты:
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).
Использовать 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
);