Функция FIRST_VALUE SQL-сервера

В этом руководстве вы узнаете, как использовать функцию 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;

Пример просмотра FIRST_VALUE SQL Server

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;

Вот что получилось:

Пример FIRST_VALUE для набора результатов SQL Server

В этом примере:

  • Предложение 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;

На следующем рисунке показан результат:

Пример FIRST_VALUE для SQL Server по разделу

В этом примере:

  • Предложение PARTITION BY распределило строки по годам на два раздела: один для 2016 года, а другой для 2017 года.
  • Предложение ORDER BY сортирует строки в каждом разделе по количеству(qty) от меньшего к большему.
  • Функция FIRST_VALUE() применяется к каждому разделу отдельно. Для первого раздела она вернула Electric Bikes, а для второго раздела — Comfort Bicycles, поскольку эти категории были первыми строками в каждом разделе.

В этом руководстве вы узнали, как использовать функцию FIRST_VALUE() SQL Server для возврата первого значения в упорядоченном разделе результирующего набора.

Мирослав С.

Автор статей, ИБ-специалист