Таблица USER:
Чтобы получить одну запись, дата и время которой указаны непосредственно перед 2000-09-09 и 08:29:34.
SELECT
DATE, TIME
FROM
USER
WHERE
DATE > 2000-09-09
AND TIME > 08:29:34
ORDER BY
DATE, TIME
FETCH FIRST 1 ROW ONLY
Но этот запрос не кажется правильным.
Мне нужно получить результат как
2 | DANE |2000-09-09 | 07:01:02
Это может быть любая дата. Пришлось получить последнюю версию до указанной даты и времени.


Использование запроса на ограничение должно работать здесь, но ваша текущая логика даты немного неверна. Попробуйте использовать эту версию:
SELECT DATE, TIME
FROM USER
WHERE
(DATE = '2000-09-09' AND TIME < '08:29:34') OR DATE < '2000-09-09'
ORDER BY DATE DESC, TIME DESC
FETCH FIRST 1 ROW ONLY;
Пункт WHERE ограничивается записями только до 9 сентября 2000 года в 8:29 утра. Затем из этого подмножества мы упорядочиваем по убыванию даты/времени и сохраняем только первую запись.
Попробуй это.
with t (ID, NAME, DATE, TIME) as
(
values
(1, 'ALPHI', '2000-09-09', '08:29:34')
, (2, 'DANE', '2000-09-09', '07:01:02')
, (3, 'SAM', '2000-09-09', '06:02:03')
, (4, 'ALI', '2000-06-01', '11:11:11')
)
select *
from t
where timestamp(date, time) < timestamp('2000-09-09', '08:29:34')
order by date desc, time desc
limit 1
select *
from USER
where
(DATE <= '2000-09-09' AND TIME < '08:29:34')
order by date desc, time desc, name asc
fetch first 1 row only;
Этот sql-запрос будет работать, если у вас есть несколько записей пользователей на одну и ту же дату и время. т. е. если у вас есть одна запись в «2000-09-09 и 08:29:34».
привет @TimBiegeleisen Прошу вас исправить мое понимание. если нижеприведенное неверно. Этот «упорядочение по имени по возрастанию» поможет упорядочить записи до указанной даты и времени на основе имени, и мы сможем правильно получить первую строку.
This sql query will work... Нет, не будет, потому что даты до 9 сентября разрешены в любое время.