SQL - Использовать DATEADD в GROUP BY (?) - PullRequest
0 голосов
/ 07 января 2020

Я работаю над запросом, который предназначен для получения продаж по часам, что он и делает. Тем не менее, в используемой таблице базы данных все временные метки UTC +1, также для продаж, совершенных в стране с UTC +2.

Так что я пытаюсь достичь результата, который может быть использован местным бизнес-единицы (параметр устанавливается в зависимости от того, кто просматривает отчет, определит, какую страну / магазин отображать). Поэтому, когда продажи в стране UTC +2, отметка даты должна быть изменена на +1. Я думаю, что это можно сделать в группе, возможно, используя DATEADD вместе с условием, которое проверяет название округа. Например, когда страна - «Греция» (в базе данных существует столбец), используйте DATEADD, чтобы добавить 1 час к отметке времени.
Возможно ли это решение, и если да, то как это делается?

Это GROUP BY, которое я использую в данный момент:

SELECT
DATEPART(hour, sales.OrderDate) AS Hour,
SUM(CASE WHEN FORMAT(sales.OrderDate, 'yyyy-MM-dd') = Cast(GETDATE() AS date) THEN sales.SALES * (1 + sales.vv / 100) END) AS SALES, 
COUNT(DISTINCT (CASE WHEN FORMAT(sales.OrderDate, 'yyyy-MM-dd') = Cast(GETDATE() AS date) THEN sales.OID END) ) AS CUSTOMERS,
MAX(CASE WHEN FORMAT(sv.Date_Time, 'yyyy-MM-dd') = Cast(GETDATE() AS date) THEN sv.CC END) AS VISITORS

FROM
[DW].[Tot_Sales] AS sales
LEFT JOIN [DW].[SV_24M] AS sv ON dateadd(hour, datediff(hour, 0, sales.[OrderDate]), 0) = dateadd(HOUR, 0, sv.Date_Time)
AND sales.SID = sv.SID

WHERE 
sales.SID = @Store 
AND FORMAT(sales.OrderDate, 'yyyy-MM-dd') > DATEADD(year, - 1, Cast(GETDATE() AS date))

GROUP BY 
sales.SID, 
DATEPART(hour, sales.OrderDate)

ORDER BY 
DATEPART(hour, sales.OrderDate)

Это в столбцах SALES и CUSTOMERS это необходимо применить, и они из стол с именем sales. Вот как выглядит результат:

Resultset

Проблема заключается в том, что продажи и клиенты, произошедшие в 9-й час, фактически произошли в 10-й час в UCT +2. Данные о посетителях поступают по местному времени (в данном случае UCT +2), поэтому между посетителями и покупателями существует несоответствие.

Пример набора данных:

Набор данных

1 Ответ

0 голосов
/ 07 января 2020

Если вы знаете страны, тогда вы можете использовать AT TIME ZONE в запросе, чтобы установить соответствующее местное время.

См. this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...