Столбец выборки, в котором время конфликтует в postgresql

#sql #postgresql

Вопрос:

Здесь мне нужно получить строку, когда произойдет столкновение во времени

тип данных char для ДАТЫ, ВРЕМЕНИ НАЧАЛА и ВРЕМЕНИ ОКОНЧАНИЯ

         RECORD_ID                 DATE     START_TIME  END_TIME 
1. "00MS740720210616000001"    "20210701"    "0930"     "1930"
2. "00MS740720210616000003"    "20210701"    "1230"     "1830"
 

Я использовал приведенный ниже запрос

 SELECT * from TIME_DATA where DATE ='20210701' and start_time >='0830' and end_time <='1830'
 

Результатом приведенного выше запроса является строка номер 2

         RECORD_ID                 DATE     START_TIME  END_TIME 
1. "00MS740720210616000001"    "20210701"    "0930"     "1930"
 

Но столкновение по времени происходит для обеих строк.

Мой желаемый выход-это

         RECORD_ID                 DATE     START_TIME  END_TIME 
1. "00MS740720210616000001"    "20210701"    "0930"     "1930"
2. "00MS740720210616000003"    "20210701"    "1230"     "1830"
 

Комментарии:

1. Пожалуйста, определите «столкновение во времени».

2. «ВЫБЕРИТЕ * из ДАННЫХ о ВРЕМЕНИ, где ДАТА =’20210701′ и время начала >=’0830′ и время окончания > В этом запросе время начала и окончания, таким образом, пересекается со временем начала и окончания обеих записей в таблице. Это я имел в виду как столкновение времени.

Ответ №1:

Если вы ищете пересечения времени, используйте exists :

 select td.*
from time_data td
where exists (select 1
              from time_data td2
              where td2.date = td.date and
                    td2.end_time > td.start_time and
                    td2.start_time < td.end_time
              );
 

Комментарии:

1. Здесь мне нужно передать значения date, start_time и end_time.

2. @Manoj . . . Просто отфильтруйте внешний запрос.