Как выбрать первую запись дня, сгруппированную пользователем в SQL
Я осмотрелся и не могу понять весь ответ на этот вопрос SQL-запроса, необходимый для извлечения данных из таблицы MS Access 2000.
Вот пример того, как выглядит таблица [Time Sub]:
Мне нужно выбрать первую запись каждого дня для каждого клиента, который НЕ является кодом L или W.
Я знаю, что это можно сделать в операторе SQL, но я просто не могу понять, как это сделать. Я могу приблизиться, но никогда не приду к правильному результату.
MySQL Как выбрать первую запись и последнюю?
Ситуация упрощенная. Допустим имеется таблица кассовых чеков cashiers_check с четырьмя записями, в ней столбцы: id — идентификатор чека, amount — сумма чека и datetime — дата и время чека. Как выбрать первую и последнюю запись?
Данная задача решается с помощью оператора UNION. Если нужно получить первую и последнюю запись по полю id, то необходимо выполнить такую операцию:
Если по полю datetime, то так:
В нашем примере результат получится одинаковым в обоих случаях, следующим:
Выбрать первые записи среди дублей SQL
то как выбрать только первую (наименьшее значение date_add, а не по наименьшему id) запись каждого дубля?
![]()
В SQL Server, начиная с 2008, есть функция ранжирования ROW_NUMBER() , которая позволяет пронумеровать строки в рамках одного и того же foreign_id в порядке значения date_add
После чего остается только назначить этому запросу имя и сделать из него выборку первых строк:
Для эффективной работы подобных запросов обычно используются POC (Partition — Order — Cover) индексы — индексы, построенные по колонкам из PARTITION BY, ORDER BY и включающие в себя выбираемые данные.
Если для двух строк с однинаковой датой и одинаковым foreign_id хочется получить две строки на выходе — достаточно просто заменить ROW_NUMBER() на RANK() .