对于每行的限制范围之外的值,行之间的SQL总和经过的持续时间

时间:2017-12-21 16:24:26

标签: sql sql-server tsql datediff

一位SQL业余爱好者,因此坚持使用VantagePoint的SQL CLR后处理插件将简单的C ++ / Python / Excel函数转换为SQL查询。想要做这样的excel功能,所以我只有时间戳和价值。如果读数值小于下限,则计算读数之间的总经过时间,然后加上该运行总和,对于高于下限的读数,运行总和相同。

https://image.ibb.co/dJr0kR/SQLTime_Diff.png

这将是正常的伪代码,但不确定它将如何转换为带有CLR的SQL

foreach(row)
    if(value < lowLimit)
        lowSum += (time[row] - time[row - 1])
    if(value > highLimit)
        highSum +=(time[row] - time[row - 1])

然后我可以在报告中添加每个总和的最终值。目的是在外部经过时间超过给定的可接受范围时可视化/警告

1 个答案:

答案 0 :(得分:2)

鉴于下表:

CREATE TABLE TableA (RowDate DATETIME, val INT)

您可以使用LAG()函数获取上一个时间戳值。然后将其放入SUM(),如果val值小于lowLimit为5或大于highLimit为6,则只添加delta。

SELECT 
    lowSum = SUM(CASE WHEN val < 5 THEN DATEDIFF(minute,RowDate,LAG(RowDate) OVER (ORDER BY RowDate ASC)) END)
    ,highSum = SUM(CASE WHEN val > 6 THEN DATEDIFF(minute,RowDate,LAG(RowDate) OVER (ORDER BY RowDate ASC)) END)
FROM TableA