SQL: как выбрать запись попадающаю в интервал разных записей в таблице?
Есть база на 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)
)