【发布时间】:2020-06-05 20:50:14
【问题描述】:
我正在尝试确定是否有某种 SQL 函数可以让我查看附近的数据间隔以将它们聚合到其他聚合函数中。
我当前的数据如下所示,每 5 分钟出现一次,在每个实体的给定时间段内每天输入一次。
- EntityA 20200201 00:10:00 21.0
- EntityA 20200201 00:15:00 23.0
- EntityA 20200201 00:20:00 23.0
- ...
- EntityA 20200202 00:15:00 22.1
- ...
- EntityA 20200203 00:15:00 13.3
我已经有几个聚合函数正在查看时间范围内的整个数据系列,我向它提供了一个参数来告诉它我想将一天中的什么时间简单地视为“00:15”作为参数(声明作为日期时间),通过加入 Facts.Timekey = 4 即“00:15”作为一天中的第 4 个 5 分钟间隔。
--假设只有一个实体的缩写和简单函数。
DECLARE @TimeFrame DateTime = '00:15:00'
(SELECT stdevp(convert(decimal(19,6), facts.ActualValue))
FROM FactsDTValue as Facts
LEFT JOIN DimTime DT on Facts.TimeKey = DT.TimeKey
Where DT.TimeName24 = @TimeFrame
Group by Fact.Entity);
我希望为上面的函数做的是简单的函数,它可以在更大范围内应用到 00:15 左右的时间范围内。
如果参数是通过 00:15 并说我有另一个参数设置为 3,那么它会得到系列中每一天的事实值。实际值。不仅仅是执行聚合函数的单个值如 STDDEVP、AVERAGE、MAX、MIN、Median、Mode 等。
- 00:00 (-3)
- 00:05 (-2)
- 00:10 (-1)
- 00:15 (0)
- 00:20 (+1)
- 00:25 (+2)
- 00:30 (+3)
每天采样 7 个值(当参数设置为 3 时)与仅 1 值相比非常有效。
如果有帮助的话,我需要这样做来处理边缘值以及 NULL,就好像没有收到实体的数据一样,周期根本不存在。
我正在使用 MS SQL Server 2016;解决此问题的最佳方法是什么?是否有一个功能可以自动执行此操作,或者我可能只是错过了一些非常简单的东西?
【问题讨论】:
-
你研究过窗口函数吗?
标签: sql sql-server date window-functions gaps-and-islands