Sql как выбрать первую запись за день

от admin

Как выбрать первую запись дня, сгруппированную пользователем в SQL

Я осмотрелся и не могу понять весь ответ на этот вопрос SQL-запроса, необходимый для извлечения данных из таблицы MS Access 2000.

Вот пример того, как выглядит таблица [Time Sub]:

Мне нужно выбрать первую запись каждого дня для каждого клиента, который НЕ является кодом L или W.

Я знаю, что это можно сделать в операторе SQL, но я просто не могу понять, как это сделать. Я могу приблизиться, но никогда не приду к правильному результату.

MySQL Как выбрать первую запись и последнюю?

Ситуация упрощенная. Допустим имеется таблица кассовых чеков cashiers_check с четырьмя записями, в ней столбцы: id — идентификатор чека, amount — сумма чека и datetime — дата и время чека. Как выбрать первую и последнюю запись?

Данная задача решается с помощью оператора UNION. Если нужно получить первую и последнюю запись по полю id, то необходимо выполнить такую операцию:

Читать:
Как русифицировать линукс минт

Если по полю datetime, то так:

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

Выбрать первые записи среди дублей SQL

то как выбрать только первую (наименьшее значение date_add, а не по наименьшему id) запись каждого дубля?

Nick Proskuryakov's user avatar

В SQL Server, начиная с 2008, есть функция ранжирования ROW_NUMBER() , которая позволяет пронумеровать строки в рамках одного и того же foreign_id в порядке значения date_add

После чего остается только назначить этому запросу имя и сделать из него выборку первых строк:

Для эффективной работы подобных запросов обычно используются POC (Partition — Order — Cover) индексы — индексы, построенные по колонкам из PARTITION BY, ORDER BY и включающие в себя выбираемые данные.

Если для двух строк с однинаковой датой и одинаковым foreign_id хочется получить две строки на выходе — достаточно просто заменить ROW_NUMBER() на RANK() .

Похожие статьи