如何获得时差按名称分组的持续时间总计以及当值以某种方式变化时?

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

我正在寻找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的行之间的时间总和差。单个名称的示例数据,但是...

sql sql-server gaps-and-islands
3个回答
1
投票
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;

0
投票
只需根据您的需要修改Cetin的选择查询:

0
投票
您可以使用窗口功能:
© www.soinside.com 2019 - 2024. All rights reserved.