SQL, убрать дублирующиеся значения при условии если записи идут друг за другом

Всем привет! Я сортирую таблицу с логированием изменений значений в атрибутах, но, к сожалению, даже если атрибут не менялся, при каждом сохранении значение вновь перезаписывается как на новое, так и на то же самое. В прикрепленном примере вы можете заметить как подряд идут одинаковые записи с одним и тем же значением "Высокая". Далее я изменила значение на "Низкая", а потом вновь поменяла на "Высокая". Именно в случае, где значения "Высокая" идут подряд, логирование выполняется неправильно. Подскажите, как можно убрать повторяющиеся подряд строки? В итоге должны остаться следующие записи: Средняя - Высокая (30.07.2024 14:52) - Низкая - Высокая. введите сюда описание изображения


Ответы (1 шт):

Автор решения: Akina

Ну, например, так:

WITH cte AS (
  SELECT *, LAG(new_val_name) OVER (PARTITION BY attr_name ORDER BY stamp) lag_val_name
  FROM test
)
DELETE FROM test
USING cte
WHERE (test.attr_name, test.new_val_name, test.stamp) 
     =
      (cte.attr_name , cte.lag_val_name , cte.stamp);

fiddle

→ Ссылка