Аналитика изменения параметров oracle sql

Рейтинг: 0Ответов: 2Опубликовано: 25.05.2023

Подскажите как лучше реализовать запрос. Дана таблица на большое число строк:

Article Par1 Editor Date
Apple kg Ivanov 26.01.01 12:20
Apple mg Sidorov 25.01.01 13:01
Apple mg Sidorov 25.01.01 12:01
Apple ton Ivanov 24.01.01 11:01

Суть таблицы вывод изменений параметра одного из артикулов, кто его сделал, и дата операции. Бывают строки (как у Sidorov), где был изменен другой параметр, может быть несколько одинаковых строк за разной датой. (У артикулов параметров много но контролировать нужно только один)

Мне нужно вывести только тех кто изменял этот параметр. То есть из прошлой таблицы нужно получить следующую:

Article Par1 Editor Date
Apple kg Ivanov 26.01.01 12:20
Apple mg Sidorov 25.01.01 12:01

Я попробовал использовать LAG (Article,1) over (order by Article) Через Case получив 0 где не было изменений и 1 где было изменение. Но отсортировать и оставить только одного Sidorov не получается.. Что тут можно придумать?

Ответы

▲ 0Принят

Надо использовать LAG, как ты и хотел

select     
    Article, Par1, Editor, Date_
from
    (    
    select 
        Article, Par1, Editor, Date_, 
        case when Par1 <> lag (Par1) over (partition by Article order by Date_) then 1 end is_modified
    from     
        t
    )
where
    is_modified = 1         
order by 
    Date_ desc
▲ 0
select * from(
    select Article, Par1, Editor, Date_, nvl(lag (Par1,1) over (order by Date_),0) as prev
    from
        (select Article, nvl(Par1,'null') as Par1, Date_, Editor from T)
        order by dzupd desc)
where Par1 <> prev

This code work for my task.