我正在处理一个按小时检索销售额的查询,它确实是这样的。但是,在used数据库表中,所有时间戳都是UTC +1
,这也适用于在使用UTC +2
的国家/地区进行的销售。
因此,我试图实现的是一个可供本地业务单位使用的结果(根据查看报告的人来设置一个参数,该参数将决定显示哪个国家/商店)。因此,当它在UTC +2
国家/地区销售时,日期戳需要修改为+1。我认为这可以在group by中完成,也许可以使用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
),因此访问者和客户之间不匹配。
样本数据集:
发布于 2020-01-07 13:25:29
如果您知道这些国家/地区,那么可以在查询中使用AT时区来设置适当的本地时间。
请参阅this
https://stackoverflow.com/questions/59627526
复制