SQL устраняет повторяющиеся строки на основе двух столбцов
Попытка написать запрос Presto, чтобы исключить то, что я считаю повторяющимися записями. Вот упрощенная версия моей таблицы:
На самом деле не имеет значения, сохраняю ли я пару (AA, BB) или (BB, AA), для этой цели они одинаковы. Фактические значения представляют собой полуслучайные строки.
Я пробовал несколько подходов, таких как попытка НЕ СУЩЕСТВУЕТ и разные СОЕДИНЕНИЯ, но в итоге они удаляют строки (AA, BB) и (BB, AA).
1 ответ
Один из способов - использовать оконные функции:
select a, b, c
from (select t.*,
row_number() over (partition by least(a, b), greatest(a, b), c order by c) as seqnum
from t
) t
where seqnum = 1;
Другой метод использовал бы
not exists
:
select t.*
from t
where a < b or
not exists (select 1
from t t2
where t2.c = t.c and
t2.b = t.a and
t2.a = t.b
);
Честно говоря, я не знаю, какой из них лучше работает на Presto.