几天来,我一直在努力解决这个问题,并且希望得到一些关于如何正确处理这个问题的反馈或建议。
我正在尝试创建一个每小时运行的 SQL 查询,该查询选择前一小时的所有记录并将它们插入到新的报告表中。我当前的 SQL 查询按预期工作;但我现在需要找出如何调整CreationHour
和CreationDate
根据客户的 GMT 设置
问题是付款记录是根据服务器日期/时间(即 GMT -5 和数据类型datetime
)插入的,所以我需要根据客户 GMT 以某种方式调整时间,然后添加或减去 -5 GMT服务器。
到目前为止,我唯一能想到的是使用 CASE 语句,但问题是我需要使用相同的 CASE 语句 5 次,这将有 73 个可能的 WHEN 语句。
任何人都可以就如何解决此问题或解决此问题提出更好的选择吗?到目前为止,上周我遇到了 3 个死胡同,找不到更优化的方法来解决这个问题。
这是我正在执行的当前 SQL 查询:
SELECT
P.ComputerID, P.CustomerID, MAX(C.GMT) AS TimeAdguest,
MAX(DATEPART(HOUR, dateadd(hour, (C.GMT -1), P.CreationDateTime))) AS [CreationHour],
Convert(varchar(10),MAX(dateadd(hour, (C.GMT -1),P.CreationDateTime)),101) AS [CreationDate],
SUM(P.SecondsPurchased) AS [Seconds],
SUM(P.PagesPurchased) AS [Pages],
SUM(P.Amount) AS [Amount]
FROM [Payments] P
left Join Customer C ON C.CustomerID = P.CustomerID
WHERE
DATEPART(HOUR, P.CreationDateTime) = DATEPART(HOUR, dateadd(hour,-1, getdate()))
AND Convert(varchar(10), dateadd(hour, -1, P.CreationDateTime), 101) = Convert(varchar(10), dateadd(hour, -1, getdate()), 101)
GROUP BY
Convert(varchar(10),P.CreationDateTime,101), P.ComputerID, P.CustomerID
并返回以下结果:
ComputerID CustomerID TimeAdguest CreationHour CreationDate Seconds Pages Amount
-------------------------------------------------------------------------------------------
7679 1188 -2 8 03/27/2013 1670 0 56.9600009918213
12891 42 17 3 03/28/2013 740 0 26.7200005054474
12893 42 17 3 03/28/2013 480 0 20.1400001049042
12894 42 17 3 03/28/2013 280 0 10.8799998760223
12943 42 17 3 03/28/2013 120 0 1
12943 1188 -2 8 03/27/2013 240 0 2
13407 1188 -2 8 03/27/2013 960 0 40.2800002098084
13476 1188 -2 8 03/27/2013 840 0 25.6999996900558
14281 42 17 3 03/28/2013 562 0 6
16026 1188 -2 8 03/27/2013 1134 0 13