Oracle SQL - выбор конкретных данных из нескольких строк в одну строку - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь выбрать данные из нескольких строк в одну строку.Например, с этим набором данных:

NAME     THING        DATE
-----   ------       ------
JACK     1            EARLY
JACK     2            LATER
JACK     3            NOW
JANE     1            LATER
JANE     2            EARLY
JANE     3            NOW

Я хочу получить следующий результат:

NAME       THING          DATE
----        ----          -----
JACK        1, 2, 3       NOW
JANE        1, 2, 3       NOW

Итак, я знаю, что могу использовать функцию LISTAGG для объединения "Thing"строк, но мой самый большой вопрос - как выбрать несколько строк, чтобы получить значения" СЕЙЧАС "в поле даты.

Любая помощь будет оценена.Спасибо!

1 Ответ

0 голосов
/ 16 мая 2019

Не ясно, хотите ли вы установить самую последнюю дату для какой-либо вещи (упорядочение агрегированных вещей по дате или по их собственным значениям):

select name,
  listagg(thing, ',') within group (order by date_col) as things,
  max(date_col) as now
from your_table
group by name
order by name;

или дата, соответствующая наибольшему значению вещи:

select name,
  listagg(thing, ',') within group (order by thing) as things,
  max(date_col) keep (dense_rank last order by thing) as now
from your_table
group by name
order by name;

Как вы сказали, на самом деле это даты, когда ваши образцы данных с добавленными значениями даты настроены немного по-разному для двух имен:

NAME      THING DATE_COL  
---- ---------- ----------
JACK          1 2019-01-01
JACK          2 2019-03-15
JACK          3 2019-04-30
JANE          1 2019-02-01
JANE          2 2019-05-03
JANE          3 2019-04-02

первый запрос получает:

NAME THINGS          NOW       
---- --------------- ----------
JACK 1,2,3           2019-04-30
JANE 1,3,2           2019-05-03

и второй запрос получает:

NAME THINGS          NOW       
---- --------------- ----------
JACK 1,2,3           2019-04-30
JANE 1,2,3           2019-04-02

дб <> скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...