[英]SQL - Use DATEADD in GROUP BY (?)
我正在處理一個旨在按小時檢索銷售額的查詢,它確實如此。 但是,在使用的數據庫表中,所有時間戳都是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
的表。 這是結果的樣子:
問題在於,在UCT +2
在 9 小時發生的銷售和客戶實際上是在 10 小時發生的。 訪客數據在當地時間到達(在本例中為UCT +2
),因此訪客和客戶之間不匹配。
樣本數據集:
如果您知道國家/地區,則可以在查詢中使用 AT TIME ZONE 來設置適當的本地時間。
參考這個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.