ninetwgb
@ninetwgb
Живу

Как в pgsql найти дубликаты с временными промежутками?

Имеем таблицу с дубликатами вида:
id        name        date
1         some1      2017-12-21 10:15:05
2         some1      2017-12-21 10:15:10
3         some1      2017-12-21 09:15:05
4         some1      2017-12-21 10:30:10


Условие такое, если есть одинаковая запись по полю name с разницей в 5 сек. максимум, то это считается дублем.
Собственно вопрос: как вывести такие записи с таким условием?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 2
@gill-sama
select t1.id, t1.name, min(t1.date), count(*) from test t1
join test t2 on t1.name = t2.name and t1.date BETWEEN t2.date-'5 seconds'::interval and t2.date+'5 seconds'::interval
group by t1.id, t1.name
having count(*) >1

ну вот так допустим
Ответ написан
Комментировать
ninetwgb
@ninetwgb Автор вопроса
Живу
немного доработал
select DISTINCT t1.id, t1.name from test t1
INNER JOIN test t2 on t1.name = t2.name and t1.date BETWEEN t2.date-'5 seconds'::interval and t2.date+'5 seconds'::interval and t1.id <> t2.id
WHERE t1.date >= 20171220 and t1.date < 20171221

таким запросом получаем id и name дубля в пределах c 20.12.2017 по 21.12.2017
вдруг кому пригодится.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы