簡體   English   中英

SQL - 在 GROUP BY (?) 中使用 DATEADD

[英]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)

這是需要應用的SALESCUSTOMERS列,它們來自名為sales的表。 這是結果的樣子:

結果集

問題在於,在UCT +2在 9 小時發生的銷售和客戶實際上是在 10 小時發生的。 訪客數據在當地時間到達(在本例中為UCT +2 ),因此訪客和客戶之間不匹配。

樣本數據集:

數據集

如果您知道國家/地區,則可以在查詢中使用 AT TIME ZONE 來設置適當的本地時間。

參考這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM