我一直在努力解决这个问题,并希望有人能给我一个解决这个问题的想法。
我们有一项服务,每天多次为每次状态更新收集Facebook的评论,评论和分享。存储此数据的表格如下:
PostId EngagementTypeId Value CollectedDate
100 1(for likes) 10 1/1/2013 1:00
100 2 (comments) 2 1/1/2013 1:00
100 3 0. 1/1/2013 1:00
100. 1. 12 1/1/2013 3:00
100. 2. 3. 1/1/2013 3:00
100. 3 5. 1/1/2013 3:00
值包含收集时每种参与类型的总数。
我要求创建一个报告,显示每天在不同时区的新价值。
目前,我正在一个存储过程中进行计算,该存储过程采用时区偏移量并基于此计算每天的增量值。如果这是针对加利福尼亚州的某个人,则报告将显示12个赞,3个评论和5个12/31/2012的股票。但如果时区偏移为-1的人,他将在2012年12月31日看到10个喜欢,并在2013年1月1日看到2个喜欢。
如果我们有大量数据和大日期范围,我遇到的问题是即时进行计算可能会很慢。我们正在讨论为每天预先计算的delta并存储在一个表中,我可以从中查询(我们正在考虑SSAS,但这是针对下一阶段)。但是这样做,我需要为24个时区提供每天的数据。我是否正确(如果是这样,这不是理想的)或者有更好的方法来解决这个问题吗?
我正在使用SQL 2012。
谢谢!
答案 0 :(得分:1)
您需要根据用户的UTC时间将存储在列中的UTC DateTime
转换为Date
。这样您就不必担心任何必须填充数据的表。要从UTC列获取用户日期,您将使用类似
SELECT CONVERT(DATE,(DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), '01/29/2014 04:00')))
AS MyLocalDate
上面的select语句根据UTC日期和本地日期的差异计算出本地日期。您需要将[{1}}替换为传入您的程序的用户GETDATE()
,并将DATETIME
替换为您的列。这样,当您从表中选择任何日期时,将根据用户当地时间的日期。比你可以相应地计算其他字段。