Выберите одну строку со значениями и оставьте те же строки со значениями NULL - PullRequest
1 голос
/ 11 марта 2020

У меня есть такие данные:

Date_time OS       Login    Action    Download  Action_detail      Download_detail
09-09-19  Android  User_id  Download  50        Download - Games   20
09-09-19  Android  User_id  Download  50        Download - App     15
09-09-19  Android  User_id  Download  50        Download - Music   30  
09-09-19  Android  User_id  Download  50        Download - Others  20
09-09-19  Android  Guest    Download  20        Download - Games   20
09-09-19  iOS      User_id  Download  10        Download - Others  15
09-09-19  iOS      Guest    Uninstall 15        Download - Games   20
09-09-19  iOS      Guest    Uninstall 15        Download - App     5
10-09-19  iOS      Guest    Uninstall 20        Download - App     15
10-09-19  iOS      Guest    Uninstall 20        Download - App     10

есть ли у меня запрос на возврат, например:

Date_time OS       Login    Action    Download  Action_detail      Download_detail
09-09-19  Android  User_id  Download  50        Download - Games   20
09-09-19  Android  User_id  Download  (null)    Download - App     15
09-09-19  Android  User_id  Download  (null)    Download - Music   30  
09-09-19  Android  User_id  Download  (null)    Download - Others  20
09-09-19  Android  Guest    Download  20        Download - Games   20
09-09-19  iOS      User_id  Download  10        Download - Others  15
09-09-19  iOS      Guest    Uninstall 15        Download - Games   20
09-09-19  iOS      Guest    Uninstall (null)    Download - App     5
10-09-19  iOS      Guest    Uninstall 20        Download - App     15
10-09-19  iOS      Guest    Uninstall (null)    Download - App     10

столбец Номер загрузки - это уникальный номер действия загрузки в конце я хочу обобщить его с уникальными date_time, OS, Login, Action в качестве среза.

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете использовать функцию LAG для получения требуемого результата, как показано ниже:

1002 * DEMO HERE
SELECT Date_time,OS,Login,Action,Download,Action_detail,Download_detail, 
CASE 
    WHEN Download = LAG(Download,1) OVER (ORDER BY (SELECT NULL FROM DUAL)) THEN NULL
    ELSE Download
END New_Column
FROM your_table

Существует проблема с ORDER для WINDOW Как вы можете видеть, я использовал «SELECT NULL FRU DUAL», чтобы сохранить нормальный порядок данных. Но это не подтвердит, что порядок данных будет таким же всегда. Если у вас есть какой-либо столбец в таблице, который можно использовать для упорядочивания, это будет правильным подходом.

...