Oracle SQL - возвращение результатов нескольких строк в одну строку с использованием LAG или LEAD - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выяснить, как вернуть 1 строку для результатов нескольких строк.

В настоящее время мой код выглядит следующим образом:

select x.Reference,
x.date "Date1",
x.char "Char1",
lead(x.date, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date2",
lead(x.char, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char2",
lead(x.date, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date3",
lead(x.char, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char3"

from tbl x

Таблица содержит несколько записей для каждой x.Reference. Для первой строки каждого x.Reference строка возвращает желаемый результат. Однако, как и ожидалось, он продолжает выводить строку для каждого найденного x.reference. Я пытаюсь найти способ ограничить вывод этих дополнительных строк, поскольку в первой строке уже есть данные, которые мне нужны.

Спасибо заранее.

1 Ответ

0 голосов
/ 30 октября 2018

Ну, вы можете использовать row_number():

with x as (
      select x.Reference, x.date as "Date1", x.char as "Char1",
             lead(x.date, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date2",
             lead(x.char, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char2",
             lead(x.date, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date3",
             lead(x.char, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char3",
             row_number() over (partition by x.Reference order by x.date) as seqnum
      from tbl x
     )
select x.*
from x
where seqnum = 1;
...