У меня есть файл журнала, который мне нужно либо ранжировать (но обрабатывать последовательные и равные строки как связи), либо объединять последовательные равные строки (на основе определенного столбца).Моя таблица выглядит следующим образом: «Старт» и «Стоп» все последовательные (в одном и том же окне ID)
ID Start Stop Value
1 0 1 A
1 1 2 A
1 2 3 A
1 3 4 B
1 4 5 B
1 5 6 A
2 3 4 A
У меня есть два подхода, чтобы получить то, что мне нужно.
Подход1: Ранжирование (обработка последовательных строк с равными значениями в «Значение» как связей) и использование идентификатора в качестве раздела .Это должно дать вывод ниже.Но как мне сделать специальный ранг: Обрабатывать последовательные строки с равными значениями в «Значение» как связи.
Select *,
rank() OVER (partition by id order by start, stop) as Rank,
XXX as SpecialRank
from Table
ID Start Stop Value Rank SpecialRank
1 0 1 A 1 1
1 1 2 A 2 1
1 2 3 A 3 1
1 3 4 B 4 2
1 4 5 B 5 2
1 5 6 A 6 3
2 3 4 A 1 1
Подход 2: Объединить последовательные строки с равными значениями в «Значение». Это создаст таблицу, как показано ниже.
ID Start Stop Value
1 0 3 A
1 3 5 B
1 5 6 A
2 3 4 A
Я не знаю, помогает ли это, но у меня также есть столбец nextValue, который может помочь в этом
ID Start Stop Value NextValue
1 0 1 A A
1 1 2 A A
1 2 3 A B
1 3 4 B B
1 4 5 B A
1 5 6 A A
2 3 4 A ...
Пример-таблица:
CREATE TABLE #Table ( id int, start int, stop int, Value char(1), NextValue char(1));
INSERT INTO #Table values (1,0, 1, 'A', 'A');
INSERT INTO #Table values (1,1, 2, 'A', 'A');
INSERT INTO #Table values (1,2, 3, 'A', 'B');
INSERT INTO #Table values (1,3, 4, 'B', 'B');
INSERT INTO #Table values (1,4, 5, 'B', 'A');
INSERT INTO #Table values (1,5, 6, 'A', 'A');
INSERT INTO #Table values (2,3, 4, 'A', null);