【发布时间】:2019-06-13 18:21:28
【问题描述】:
我很好奇在使用 Microsoft SQL Server Management Studio 17 管理的一组 SQL 数据中找出事件发生频率和发生时间的最佳方法是什么。
下面是一个简化的数据表,用于说明我有兴趣解决的问题类型。假设传感器每 100 毫秒收集一次数据,我想知道电源降至 0 的频率和时间。
我有几个想法如何使用 CTE 和/或 Window 函数来执行此操作,但是我对这些函数的理解似乎并没有在 SQL Management Studio 中转化,因为我的代码在理论上应该正确的点上不断出现错误。
例如,我认为我可以按位置编号划分窗口函数,在功率为 0 时按点过滤,然后从 FIRST_VALUE 中减去 LAST_VALUE。然而,环境不承认这些论点。
我还想到了一个 CTE,它已经过滤掉了功率为零的点,但我无法将它带到远程功能点。
CREATE TABLE SensorData
(
[TimeStamp] DATETIME ,
[Position] INT,
[POWER] INT
);
INSERT INTO SensorData ([TimeStamp], [Position], [Power])
VALUES (4, 1, 59), (101, 1, 60), (207, 1, 50), (321, 1, 58),
(428, 1, 55), (534, 1, 59), (646, 1, 51), (755, 1, 0),
(868, 1, 0), (975, 1, 0), (1081, 1, 0), (1193, 2, 45),
(1307, 2, 52), (1412, 2, 51), (1519, 2, 55), (1629, 2, 58),
(1735, 2, 0), (1851, 2, 0), (1960, 2, 0), (2066, 2, 54);
SELECT *
FROM SensorData;
最后的输出看起来并不那么重要。重要的是我知道在这种情况下功率为零的事件数量以及该事件持续了多长时间(事件中的最后一个时间戳减去第一个时间戳)
任何建议将不胜感激!
【问题讨论】:
-
你能发布预期的输出吗?
标签: sql sql-server time-series