Улучшения функций времени и рядов
- 6 мин
С введением DATE_BUCKET
, DATETRUNC
, GENERATE_SERIES
, FIRST_VALUE
и LAST_VALUE
в SQL Server 2022 корпорация Майкрософт решает задачи эффективной работы с датами, периодами времени и созданием рядов значений. Эти функции повышают удобство использования, позволяя пользователям легко управлять периодами времени и сериями и получать значимые аналитические сведения, не препятствуя производительности системы.
DATETRUNC
Функция DATETRUNC
в SQL Server 2022 возвращает начало части даты , например, день, неделя, месяц, квартал или год. Например, начало месяца даты "2023-04-28 14:23:16.635" будет "2023-04-01 00:00:00.000".
Группировка дат
SQL Server 2022 также представила функцию DATE_BUCKET
, которая работает так же, как DATETRUNC
, но имеет дополнительный параметр для определения ширины частей даты в сегментах от исходного времени. Например, вы можете узнать начало предыдущего года с даты "2023-04-28 14:23:16.635", которая будет "2022-01-01 00:00:00.000". В этом случае вы указали 2 в качестве ширины; например, DATE_BUCKET(YEAR, 2, DateTimeWeAreLookingFor)
.
FIRST_VALUE и LAST_VALUE
Функции FIRST_VALUE
и LAST_VALUE
были представлены в более ранних версиях SQL Server, чтобы получить первое или последнее значение в упорядоченном наборе строк. В SQL Server 2022 мы улучшили обе функции, добавив возможность IGNORE NULLS
или RESPECT NULLS
.
Верните ID первого и последнего заказа, используя DATETRUNC, FIRST_VALUE и LAST_VALUE.
Пришло время объединить все эти функции. Предположим, что вы являетесь DBA для розничной компании. Команда продаж хотела бы понять наши лучшие шаблоны покупок клиента немного лучше. Команда попросила предоставить им первые и последние ID заказов на продажу для этого клиента за последний год покупок в нашей базе данных. Идентификатор клиента — 11711.
С помощью некоторых новых и улучшенных функций SQL Server 2022 эта проблема менее сложна. Функция DATETRUNC
помогает объединить все покупки за последний год покупки клиента. После объединения всех этих покупок с помощью функций FIRST_VALUE
и LAST_VALUE
легко найти первые и последние даты заказа. Выполните следующий запрос в SQL Server Management Studio (SSMS), чтобы увидеть возможности объединения DATETRUNC
, FIRST_VALUE
и LAST_VALUE
, чтобы помочь команде продаж.
DECLARE @LastPurchaseDate DATETIME
DECLARE @CustomerID INT = 11711
SELECT @LastPurchaseDate = MAX(soh.OrderDate)
FROM [AdventureWorks2022].[Sales].[SalesOrderHeader] soh
JOIN [AdventureWorks2012].Person.Person p ON p.BusinessEntityID = soh.CustomerID
WHERE soh.CustomerID = 11711
GROUP BY CustomerID
SELECT DISTINCT FIRST_VALUE(SalesOrderID) IGNORE NULLS OVER (PARTITION BY CustomerID ORDER BY OrderDate) AS FirstOrderId,
LAST_VALUE(SalesOrderID) IGNORE NULLS OVER (PARTITION BY CustomerID ORDER BY OrderDate ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS LastOrderId
FROM [AdventureWorks2012].[Sales].[SalesOrderHeader] soh
WHERE CustomerID = @CustomerID
AND DATETRUNC(YEAR,@LastPurchaseDate) = DATETRUNC(YEAR,OrderDate)
Результаты:
FirstOrderId (Идентификатор первого заказа) | ПоследнийИдентификаторЗаказа |
---|---|
64134 | 75036 |
Это введение в новые и расширенные функции SQL Server 2022 для работы с датами и рядами поможет вам найти более простые способы решения этих проблем. Хотя вы просматриваете некоторые функции дат и рядов, также ознакомьтесь с нашей новой функцией GENERATE_SERIES
, которая позволяет создавать ряд значений в указанном диапазоне с заданным шагом.