Выберите из результата выбора, используя лаг - PullRequest
0 голосов
/ 15 мая 2019

Это сценарий, данный

SELECT * 
FROM   arcade_machine_history_movement 
WHERE  code_machine = 23502 
ORDER  BY date_movement ASC; 


CODE_MACHINE TYPE          date_movement   CURRENT_COMPANY 
23502        T             01/01/2015      SPAIN GAMES
23502        T             01/03/2016      SPAIN GAMES
23502        T             01/01/2016      SPAIN GAMES
23502        S             01/01/2019      FUN GAMES
23502        T             11/01/2019      FUN GAMES
23502        S             11/03/2019      POKER STAR

Таблица arcade_machine_history_movement представляет все истории движений игровых автоматов. «S» означает продажу от одной компании от другой.

Я хочу получить данные о продажах каждого игрового автомата и узнать текущую компанию (покупателя) и предыдущую компанию (того, кто продает автомат)

Это то, что я сделал

SELECT code_machine, 
   type_m, 
   current_company, 
   Lag (current_company) 
     OVER ( 
       ORDER BY date_movement ASC) AS previous_company 
       FROM   arcade_machine_history_movement 
       WHERE  code_machine = 23502; 

С отставанием я получаю предыдущую компанию в каждом ряду.

Так что это результат.

code_machine type_m  date_movement current_company previous_company
23502        T  01/01/2015   SPAIN GAMES     
23502        T  01/03/2016   SPAIN GAMES     SPAIN GAMES
23502        T  01/01/2016   SPAIN GAMES     SPAIN GAMES 
23502        S  01/01/2019   FUN GAMES       SPAIN GAMES    
23502        T  11/01/2019   FUN GAMES       SPAIN GAMES
23502        S    11/03/2019     POKER GAMES     FUN GAMES

Так что теперь я хочу создать другой выбор из этого предыдущего выбора, чтобы получить только движения 'S', но я не знаю, как это сделать правильно.

code_machine type_m    date_movement   current_company      previous_company
23502        S        11/03/2019      FUN GAMES           SPAIN GAMES
23502        S        11/03/2019      POKER GAMES         FUN GAMES

Вот что я пробовал:

SELECT   code_machine, 
     type_m, 
     date_movement, 
     current_company, 
     previous_company 
FROM     (code_machine,type_m,date_movement, current_company, lag 
(current_company) OVER (ORDER BY date_movement ASC) AS empresa_anterior 
FROM arcade_machine_history_movement WHERE code_machine 23502)
WHERE    type_m ='S';

Я запускаю этот запрос, но он не завершается, и он все время думает.

Я использую Oracle SQL developer

Я ценю любое предложение.

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Просто используйте подзапрос:

SELECT amhm.*
FROM (SELECT amhm.*, 
             Lag(current_company) OVER (PARTITION BY code_machine ORDER BY date_movement ASC) AS previous_company 
      FROM arcade_machine_history_movement amhm
      WHERE code_machine = 23502
     ) amhm
WHERE type = 'S';
2 голосов
/ 15 мая 2019

Вы можете сделать это в первом запросе, добавив «И» и второе условие:

SELECT code_machine, 
   type_m, 
   current_company, 
   Lag (current_company) 
     OVER ( 
       ORDER BY date_movement ASC) AS previous_company 
       FROM   arcade_machine_history_movement 
       WHERE  code_machine = 23502 AND type_m = 'S'; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...