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

问题描述 投票:0回答:1

有点像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])

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

sql sql-server tsql datediff
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.