Чтобы получить предыдущую запись, которая меньше заданной даты и времени

Таблица USER:

ИДЕНТИФИКАТОР ИМЯ ДАТА ВРЕМЯ 1 АЛЬФИ 09.09.2000 08:29:34 2 ДЕЙН 09.09.2000 07:01:02 3 СЭМ 09.09.2000 06:02:03 4 АЛИ 01.06.2000 11:11:11

Чтобы получить одну запись, дата и время которой указаны непосредственно перед 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

Это может быть любая дата. Пришлось получить последнюю версию до указанной даты и времени.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Использование запроса на ограничение должно работать здесь, но ваша текущая логика даты немного неверна. Попробуйте использовать эту версию:

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
ИДЕНТИФИКАТОР ИМЯ ДАТА ВРЕМЯ 2 ДЕЙН 09.09.2000 07:01:02

рабочий пример

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».

This sql query will work ... Нет, не будет, потому что даты до 9 сентября разрешены в любое время.
Tim Biegeleisen 29.06.2024 10:19

привет @TimBiegeleisen Прошу вас исправить мое понимание. если нижеприведенное неверно. Этот «упорядочение по имени по возрастанию» поможет упорядочить записи до указанной даты и времени на основе имени, и мы сможем правильно получить первую строку.

subhasis 29.06.2024 10:48

Другие вопросы по теме