首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -在GROUP BY (?)

SQL -在GROUP BY (?)
EN

Stack Overflow用户
提问于 2020-01-07 19:28:02
回答 1查看 84关注 0票数 0

我正在处理一个按小时检索销售额的查询,它确实是这样的。但是,在used数据库表中,所有时间戳都是UTC +1,这也适用于在使用UTC +2的国家/地区进行的销售。

因此,我试图实现的是一个可供本地业务单位使用的结果(根据查看报告的人来设置一个参数,该参数将决定显示哪个国家/商店)。因此,当它在UTC +2国家/地区销售时,日期戳需要修改为+1。我认为这可以在group by中完成,也许可以使用DATEADD和一个检查县名称的条件。例如,当国家为‘希腊’(列存在于数据库中)时,使用DATEADD将时间戳添加1小时。

这是一种可能的解决方案吗?如果是,它是如何实现的?

这是我现在使用的GROUP BY

代码语言:javascript
复制
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的表。结果如下所示:

Resultset

问题是,在UCT +2中,在9小时发生的销售和客户实际上发生在10小时。访问者数据在当地时间到达(本例中为UCT +2),因此访问者和客户之间不匹配。

样本数据集:

Dataset

EN

回答 1

Stack Overflow用户

发布于 2020-01-07 21:25:29

如果您知道这些国家/地区,那么可以在查询中使用AT时区来设置适当的本地时间。

请参阅this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59627526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档