我正在寻找Value最初<>且现在为0(按名称分组)的行之间的时间总和差。单个名称的示例数据,但实际数据中有许多不同的名称。
+--------+---------------+---------------------+--------+
| RowNum | Name | Timestamp | Value |
+--------+---------------+---------------------+--------+
| 1 | D1_HS_308_ALM | 2020-02-10 11:55:00 | 0 |
| 2 | D1_HS_308_ALM | 2020-02-10 11:51:00 | 0 |
| 3 | D1_HS_308_ALM | 2020-02-10 11:49:00 | NULL |
| 4 | D1_HS_308_ALM | 2020-02-10 11:46:00 | 1 |
| 5 | D1_HS_308_ALM | 2020-02-10 08:02:00 | 0 |
| 6 | D1_HS_308_ALM | 2020-02-10 08:02:00 | NULL |
| 7 | D1_HS_308_ALM | 2020-02-10 08:02:00 | 0 |
| 8 | D1_HS_308_ALM | 2020-02-10 07:56:00 | 1 |
| 9 | D1_HS_308_ALM | 2020-02-10 07:51:00 | 1 |
| 10 | D1_HS_308_ALM | 2020-02-10 07:50:00 | 0 |
+--------+---------------+---------------------+--------+
对于第9行-> 7过渡,此数据应返回11分钟;对于第4行-> 2过渡,此数据应返回5分钟;此名称总计16分钟。
当不确定下一行是否具有正确的值更改时,我不确定如何完成此操作-有时以后会多行或多行。
我正在查找按值分组的,在Value最初为1且现在为0的行之间的时间总和差。单个名称的示例数据,但是...
DECLARE @myTable TABLE
(
RowNum INT,
Name VARCHAR(20),
[Timestamp] DATETIME,
Value INT
);
INSERT INTO @myTable
(
RowNum,
Name,
[Timestamp],
Value
)
VALUES
(1, 'D1_HS_308_ALM', '2020-02-10 11:55:00', 0),
(2, 'D1_HS_308_ALM', '2020-02-10 11:51:00', 0),
(3, 'D1_HS_308_ALM', '2020-02-10 11:49:00', NULL),
(4, 'D1_HS_308_ALM', '2020-02-10 11:46:00', 1),
(5, 'D1_HS_308_ALM', '2020-02-10 08:02:00', 0),
(6, 'D1_HS_308_ALM', '2020-02-10 08:02:00', NULL),
(7, 'D1_HS_308_ALM', '2020-02-10 08:02:00', 0),
(8, 'D1_HS_308_ALM', '2020-02-10 07:56:00', 1),
(9, 'D1_HS_308_ALM', '2020-02-10 07:51:00', 1),
(10, 'D1_HS_308_ALM', '2020-02-10 07:50:00', 0);
SELECT *,
DATEDIFF(MINUTE, tStart, tEnd) AS duration
FROM
(
SELECT t1.Name,
MIN(t1.RowNum) AS rStart,
MIN(t1.Timestamp) AS tStart,
t.rNo AS rEnd,
t.tEnd
FROM @myTable t1
OUTER APPLY
(
SELECT TOP (1)
t2.RowNum,
t2.Timestamp
FROM @myTable t2
WHERE t1.Name = t2.Name
AND t2.Timestamp > t1.Timestamp
AND t2.Value = 0
ORDER BY t2.Timestamp
) t(rNo, tEnd)
WHERE t1.Value = 1
GROUP BY t1.Name,
t.rNo,
t.tEnd
) tmp;