Oracle SQL для извлечения данных на основе движения записи - PullRequest
1 голос
/ 10 января 2020

У меня есть данные, как показано ниже:

Table abc
    product_id      shelf_number     moved_date
    123             1                01-Jan-18
    123             2                02-Jan-18 
    456             1                01-Jan-18
    678             1                01-Jan-18
    123             3                03-Jan-18 
    789             2                01-Jan-18
    789             1                02-Jan-18

Я использую Oracle и мне нужно получить product_id, который был перемещен с полки № 1 в последовательность в соответствии с перемещенной датой.

Только product_id 123 удовлетворяет критериям, так как product_id 123 был перемещен из регистра_номер 1 в 2 в порядке, указанном в перемещенной дате.

Идентификатор продукта 789 должен быть исключен, поскольку он был перемещен из номера_№2 в 1 которые нарушают критерии.

Есть идеи по SQL для достижения этого? Есть ли в Oracle P / L SQL функция analyti c, которая легко это делает? Спасибо.

Спасибо,

Хатхх ie

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я думаю, что вы хотите lag():

select t.*
from (select t.*,
             lag(shelf_number) over (partition by product_id order by moved_date) as prev_shelf_number
      from t
     ) t
where prev_shelf_number = 1 and shelf_number = 2;
0 голосов
/ 10 января 2020

Это может помочь

select * from tbl a where exists(select 1 from tbl b where a.product_id = b.product_id      
 and b.shelf_number = 2 and a.moved_date > b.moved_date) and and a.shelf_number = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...