棘手:用于制图的时间序列数据的SQL Server端聚合

时间:2016-04-04 15:42:33

标签: sql-server time-series aggregation

我在一个包含5年数据的表中有一个大的时间序列数据集。数据非常有条理;它在时间列上聚集/排序,在整个5年期间,每10分钟只有一条记录。

在我的用户端应用程序中,我有一个400像素宽的时间序列图表,用户可以将时间范围设置为1小时到5年。因此,此图表返回400多条记录的任何数据库查询都会提供无法物理显示的数据。

我想知道的是;任何人都可以建议一种方法,这样当数据库被查询一定的时间范围时,SQL数据库会动态地做出一个合适的平均聚合,返回不超过400条记录吗?

示例1):如果时间范围是5年,SQL Server将每4.5天计算〜1个值(需要5个* 365天/ 400个记录),因此将平均每个4.5天的bin的所有10分钟样本并返回每个垃圾箱的记录。总共约400人。

示例2):如果时间范围是一个月,SQL Server将每1.85小时计算约1条记录(31天/ 400条记录),因此将每个1.85小时区间的所有10分钟样本平均并返回记录为每个垃圾箱。总共约400人。

理想情况下,我喜欢一种解决方案,从应用程序的角度来看,可以像静态表一样查询。

我非常感谢任何建议的方法或代码段。

1 个答案:

答案 0 :(得分:0)

some examples, if you have a datetime column (which is not quite clear from your question, as there is not table schema):

Grouping into interval of 5 minutes within a time range

SELECT / GROUP BY - segments of time (10 seconds, 30 seconds, etc)

They should be quite easy to port to SQL server, use datediff to convert your datetime values into an unix timestamp and use round() with the function parameter <> 0 for the div.