Аналитика изменения параметров oracle sql
Подскажите как лучше реализовать запрос. Дана таблица на большое число строк:
| 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 не получается.. Что тут можно придумать?
Ответы (2 шт):
Надо использовать 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
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.