SQL, чтобы показать перекрывающиеся периоды времени - PullRequest
2 голосов
/ 30 апреля 2020

Как проверить в Postgresql 9.2 (команда SQL), если в записях меток времени есть некоторый период, перекрывающий другие из того же id_user. Мне нужно исправить существующую таблицу.

Например, запрос показывает строки 1,3 и 4.

id | id_user | timedate0           | timedate2
---------------------------------------------------
1  | 1       | 2020-04-20 12:00:00 | 2020-04-20 14:00:00
2  | 1       | 2020-04-20 17:00:00 | 2020-04-20 19:30:00
3  | 1       | 2020-04-20 14:30:00 | 2020-04-20 15:40:00
4  | 1       | 2020-04-20 13:00:00 | 2020-04-20 15:00:00
5  | 1       | 2020-04-21 13:00:00 | 2020-04-21 14:00:00
6  | 1       | 2020-04-21 14:00:00 | 2020-04-21 15:00:00

1 Ответ

2 голосов
/ 30 апреля 2020

Вы можете использовать exists:

select t.*
from t
where exists (select 1
              from t t2
              where t2.timedate0 < t.timedate2 and
                    t2.timedate2 > t.timedate0 and
                    t2.id_user = t.id_user and t2.id <> t.id
             );
...