У меня есть таблица с несколькими идентификаторами. Каждый идентификатор имеет значения, упорядоченные последовательным индексом.SQL Server 2008: найти число смежных строк с равными значениями
create table myValues
(
id int,
ind int,
val int
)
insert into myValues
values
(21, 5, 300),
(21, 4, 310),
(21, 3, 300),
(21, 2, 300),
(21, 1, 345),
(21, 0, 300),
(22, 5, 300),
(22, 4, 300),
(22, 3, 300),
(22, 2, 300),
(22, 1, 395),
(22, 0, 300)
Я пытаюсь найти количество последовательных значений, которые являются одинаковыми.
Поле значения представляет некоторые данные, которые должны быть изменены для каждой записи (но не обязательно должны быть уникальными в целом).
Проблема заключается в том, чтобы узнать, когда имеется более двух последовательных строк с одинаковым значением (с учетом того же идентификатора).
Таким образом, я ищу выход, как это:
id ind val count
21 5 300 1
21 4 310 1
21 3 300 2
21 2 300 2
21 1 345 1
21 0 300 1
22 5 300 4
22 4 300 4
22 3 300 4
22 2 300 4
22 1 395 1
22 0 300 1
Я знаю, это похоже на остров и зазорами проблемы обсуждались here.
Однако все эти решения зависят от возможности использования оператора раздела со значениями, которые должны последовательно увеличиваться.
Решение, которое генерирует диапазоны «островов» в качестве посредника, также будет работать, например.
id startind endind
21 3 2
22 5 2
Обратите внимание, что для каждого идентификатора может быть много островов.
Я уверен, что есть простая адаптация решения для острова, но для жизни я не могу думать об этом.
Пытались ли вы что-нибудь еще? –
Я попытался использовать раздел с row_number() над каждой комбинацией строк, которые я мог придумать, чтобы получить индекс, который сбрасывается на каждое другое значение, но это не работает без переупорядочения. – sonarforte
Результат, о котором вы сказали, не может быть сделано с вашими данными образца. Он лишен –