Как в 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 сек. максимум, то это считается дублем.
Собственно вопрос: как вывести такие записи с таким условием?
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
немного доработал 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
вдруг кому пригодится.