【发布时间】:2017-09-05 00:54:36
【问题描述】:
问题:需要查询从世界各地收集的大量时间序列数据以生成不同的报告。
时间序列表如下所示:LoggerId (int), Datetime (Datetime), Value (decimal)。
日期时间以 UTC 格式存储,但需要转换为本地时间。在某些情况下,需要使用 AVG、SUM 汇总数据,以获得每日/每周/每月平均、总计等数据。
用户可以随时更改报告中使用的数据的时区。例如,用户 A 可能决定在时区 A 中查看 logger #1 的数据,而用户 B 可能选择在时区 B 中查看相同的数据。
到目前为止,由于夏令时使事情变得非常复杂,我无法在 SQL Server 2014 中找到一个好的解决方案。我知道在 SQL Server 2016 中有一个新的“在时区”功能,这可能是我需要的,但它在 2014 年不可用。
我们将不胜感激。
以下是一些示例数据:
LoggerId、日期时间UTC、值
1, 2017-04-10 10:00:00, 10
1, 2017-04-10 11:00:00, 20
2017-04-10 12:00:00, 30
1, 2017-04-10 13:00:00, 40
显示新西兰时间 (UTC+12) 中记录器 1 的每日总数的查询的预期结果:
LoggerId、DatetimeLocal、值
1, 2017-04-10, 30
1, 2017-04-11, 70
【问题讨论】:
-
,发布您的示例数据和预期输出
-
我稍微简化了问题并添加了一些示例数据。谢谢。
-
您需要正确考虑夏令时吗?
-
是的。 DST 是我首先遇到这个问题的主要原因。我会更新这个问题。谢谢
-
因为这个问题在等待了将近一年之后没有合适的答案。我最终将原始数据(没有聚合)查询到一个列表中,并使用 TimezoneInfo 类在 .NET 中转换日期时间,然后在 .NET 代码中聚合数据。它速度较慢,但我的应用程序的整体性能是可以接受的。感谢您的帮助!
标签: sql asp.net sql-server sql-server-2014 windows-server-2008-r2