SQL: как выбрать запись попадающаю в интервал разных записей в таблице?

Рейтинг: 0Ответов: 1Опубликовано: 22.06.2023

Есть база на PostgreSQL 14. В таблице поля numb(BIGINT), id(Varchar), date_from(TIMESTAMP) В ней записи такого вида:

numb;id;date_from;
124455;5820;2022-07-20 08:01:29; 
124455;5820;2022-07-24 08:01:29;    
124455;5402;2022-07-27 00:01:31;
124455;1020;2022-07-28 00:06:01;

У нас есть дата (в условии) '2022-07-26 21:03:23', нужно построить запрос так, чтобы за один запрос выбрать предыдущую запись у которой numb = 124455 и date_from была бы меньше чем в записи с '2022-07-27 00:01:31'

В результате мы должны выбрать только запись: '124455;5820;2022-07-24 08:01:29;', так как дата у нее больше чем дата следующей по времени записи: '2022-07-27 00:01:31' и больше у записи с датой '2022-07-20 08:01:29'.

Т.е получается мы всегда должны выбирать только одну и только предыдущую запись от той, у которой date_from меньше чем '2022-07-26 21:03:23', но не больше чем следующая запись с date_from '2022-07-27 00:01:31'.

Ответы

▲ 1Принят

Если я правильно понял вопрос

select * from test
where date_from=(select max(date_from) 
          from test where date_from<cast('2022-07-26 21:03:23' as datetime)
       )

Пример

Если нужны записи с конкретным numb, Ваш пример нужно переделать так

select * from test
where (numb = 124455) 
  AND date_from=(select max(date_from) 
          from test where date_from<cast('2022-07-26 21:03:23' as datetime) 
                     AND (numb = 124455)
       )