В этом руководстве вы узнаете, как использовать функцию FIRST_VALUE() SQL Server для получения первого значения в упорядоченном разделе результирующего набора.
Обзор функции FIRST_VALUE() SQL Server
Функция FIRST_VALUE() — это оконная функция, которая возвращает первое значение в упорядоченном разделе результирующего набора.
Ниже показан синтаксис функции FIRST_VALUE():
FIRST_VALUE( scalar_expression ) OVER( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
В этом синтаксисе:
скалярное_выражение
scalar_expression — это выражение, вычисляемое по значению первой строки упорядоченного раздела результирующего набора. scalar_expression может быть столбцом, подзапросом или выражением, вычисляющим одно значение. Оно не может быть оконной функцией.
РАЗДЕЛЕНИЕ ПО пункту
Предложение PARTITION BY распределяет строки результирующего набора по разделам, к которым применяется функция FIRST_VALUE(). Если вы пропустите предложение PARTITION BY, функция FIRST_VALUE() будет обрабатывать весь результирующий набор как один раздел.
Предложение ORDER BY
Предложение ORDER BY определяет логический порядок строк в каждом разделе, к которому применяется функция FIRST_VALUE().
предложение_диапазона_строк
Предложение rows_range_clause дополнительно ограничивает строки в разделе, определяя начальную и конечную точки.
Примеры функции FIRST_VALUE() SQL Server
Следующий оператор создает новое представление с именем sales.vw_category_sales_volume, которое возвращает количество проданных продуктов по категориям продуктов и годам.
CREATE VIEW sales.vw_category_sales_volume AS SELECT category_name, YEAR(order_date) year, SUM(quantity) qty FROM sales.orders o INNER JOIN sales.order_items i ON i.order_id = o.order_id INNER JOIN production.products p ON p.product_id = i.product_id INNER JOIN production.categories c ON c.category_id = p.product_id GROUP BY category_name, YEAR(order_date);
Вот данные из представления:
SELECT * FROM sales.vw_category_sales_volume ORDER BY year, category_name, qty;
A) Пример использования FIRST_VALUE() в результирующем наборе
В этом примере функция FIRST_VALUE() используется для возврата названия категории с самым низким объемом продаж в 2017 году:
SELECT category_name, year, qty, FIRST_VALUE(category_name) OVER( ORDER BY qty ) lowest_sales_volume FROM sales.vw_category_sales_volume WHERE year = 2017;
Вот что получилось:
В этом примере:
- Предложение PARTITION BY не было указано, поэтому весь набор результатов рассматривался как один раздел.
- Предложение ORDER BY сортирует строки в каждом разделе по количеству(qty) от меньшего к большему.
B) Пример использования FIRST_VALUE() для разделов
В следующем примере функция FIRST_VALUE() используется для возврата категорий продуктов с самыми низкими объемами продаж в 2016 и 2017 годах.
SELECT category_name, year, qty, FIRST_VALUE(category_name) OVER( `PARTITION BY` year ORDER BY qty ) lowest_sales_volume FROM sales.vw_category_sales_volume WHERE year BETWEEN 2016 AND 2017;
На следующем рисунке показан результат:
В этом примере:
- Предложение PARTITION BY распределило строки по годам на два раздела: один для 2016 года, а другой для 2017 года.
- Предложение ORDER BY сортирует строки в каждом разделе по количеству(qty) от меньшего к большему.
- Функция FIRST_VALUE() применяется к каждому разделу отдельно. Для первого раздела она вернула Electric Bikes, а для второго раздела — Comfort Bicycles, поскольку эти категории были первыми строками в каждом разделе.
В этом руководстве вы узнали, как использовать функцию FIRST_VALUE() SQL Server для возврата первого значения в упорядоченном разделе результирующего набора.