Объединение последовательных повторяющихся строк на сервере SQL - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь дедуплицировать некоторые данные в SQL Таблице сервера и не могу найти решение, поэтому надеюсь, что кто-то может помочь. Я искал ответы, и большинство, кажется, говорит, что это проблема «островов и пробелов», но я не могу отрегулировать решения, которые я видел, чтобы соответствовать моему сценарию.

Вот пример источника данные, с которыми я работаю

Source Example[1]

Если цена в последовательных строках одинакова, я бы хотел объединить их в одну строку с общим значением, действующим с и по сегодняшний день.

Target[2]

Я пытался использовать предложение PARTITION OVER, но, похоже, всегда группируются все одни и те же цены, даже если между ними есть другая цена, и, похоже, игнорирует ORDER BY часть раздела.

Есть идеи?

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете использовать row_number() s и найти группы для агрегирования:

select item, price, min(validfrom) as validfrm, max(validto) as valdto
from (select t.*, 
             row_number() over(partition by item order by validfrom desc) as seq1,
             row_number() over(partition by item, price order by validfrom desc) as seq2
      from table t
     ) t
group by item, price, (seq1 - seq2)
order by item, validfrm desc;
...