Дайте идентификаторы вариации на разрывы и проблему островков - PullRequest
0 голосов
/ 11 ноября 2018

Этот набор данных содержит один упорядоченный столбец меток времени (A) вместе с парой столбцов маркеров (B + C), которые представляют начало и конец блока * , что я и ищу произвести (D).

Мне было трудно объяснить эту проблему коллегам, но по сути мне нужен способ дать ID этим блокам с различным количеством строк, но учтите, что в строке 8 в качестве примера блок может иногда только занимают один ряд.

|           A         |  B  |  C  |  D  |
-----------------------------------------
| 06/10/2018 13:17:40 |  1  |  0  |  1  |
| 06/10/2018 13:17:56 |  0  |  0  |  1  |
| 06/10/2018 13:18:08 |  0  |  1  |  1  |
| 06/10/2018 13:18:21 |  1  |  0  |  2  |
| 06/10/2018 13:18:26 |  0  |  0  |  2  |
| 06/10/2018 13:18:26 |  0  |  0  |  2  |
| 06/10/2018 13:18:28 |  0  |  1  |  2  |
| 06/10/2018 13:18:28 |  1  |  1  |  3  |
| 06/10/2018 13:18:31 |  1  |  0  |  4  |
| 06/10/2018 19:49:26 |  0  |  0  |  4  |
| 06/10/2018 19:50:24 |  0  |  1  |  4  |

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Я не вижу, что C имеет отношение к проблеме.Это просто накопительная сумма на B:

select a, b, c,
       sum(b) over (order by a) as d
from t;
0 голосов
/ 11 ноября 2018

Вы можете попробовать использовать оконную функцию LAG в подзапросе, а затем использовать оконную функцию SUM с агрегатной функцией условия.

SELECT A,B,C,SUM(CASE WHEN preC = 1 THEN 1 ELSE 0 END) OVER(ORDER BY A,preC) +1  'D'
FROM (
 SELECT *,
        LAG(C,1,C) OVER(ORDER BY A) preC
 FROM T 
) t1

sqlfiddle

Результат

|           A         |  B  |  C  |  D  |
-----------------------------------------
| 06/10/2018 13:17:40 |  1  |  0  |  1  |
| 06/10/2018 13:17:56 |  0  |  0  |  1  |
| 06/10/2018 13:18:08 |  0  |  1  |  1  |
| 06/10/2018 13:18:21 |  1  |  0  |  2  |
| 06/10/2018 13:18:26 |  0  |  0  |  2  |
| 06/10/2018 13:18:26 |  0  |  0  |  2  |
| 06/10/2018 13:18:28 |  0  |  1  |  2  |
| 06/10/2018 13:18:28 |  1  |  1  |  3  |
| 06/10/2018 13:18:31 |  1  |  0  |  4  |
| 06/10/2018 19:49:26 |  0  |  0  |  4  |
| 06/10/2018 19:50:24 |  0  |  1  |  4  |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...