Oracle: сортировать результаты по дате с подгруппой по той же дате
Мне нужно отсортировать мои общие результаты по столбцу даты создания, указанному ниже, но сгруппировать их по идентификатору приложения, а эти подгруппы отсортировать по той же дате, например так:
APPLICATION_ID STATUS CREATE_DATE
12345 REC 01-06-2017
12345 PRO 02-06-2017
12345 DEL 03-06-2017
12746 REC 02-06-2017
12746 REC 05-06-2017
12743 DEL 04-06-2017
12743 PRO 09-06-2017
12743 PRO 11-06-2017
APPLICATION_ID - это тип данных VARCHAR2, а CREATE_DATE - тип DATE. Ни один столбец не обнуляется.
У меня нет доступа к другим соответствующим таблицам в схеме, я могу только запросить эту. Сортировка по приведенному ниже запросу не дает общего порядка дат, который мне нужен.
SELECT * FROM MY_TABLE ORDER BY APPLICATION_ID, CREATE_DATE;
Пример вывода:
APPLICATION_ID STATUS CREATE_DATE
10603 REC 15-06-2017
10603 PRO 15-06-2017
10603 DEL 22-06-2017
11251 REC 21-06-2017
11251 REC 21-06-2017
11894 DEL 02-06-2017
11894 PRO 05-06-2017
11894 PRO 06-06-2017
В приведенном выше примере я пытаюсь получить сначала 11894 записи, затем 10603, затем 11251.
1 ответ
Решение
Если вы хотите сделать заказ по минимальной дате создания приложения, подумайте о следующем:
with MY_TABLE as (
select 12746 APPLICATION_ID, 'REC' STATUS, date '2017-06-02' CREATE_DATE from dual union all
select 12746 APPLICATION_ID, 'REC' STATUS, date '2017-06-05' CREATE_DATE from dual union all
select 12743 APPLICATION_ID, 'DEL' STATUS, date '2017-06-04' CREATE_DATE from dual union all
select 12743 APPLICATION_ID, 'PRO' STATUS, date '2017-06-09' CREATE_DATE from dual union all
select 12743 APPLICATION_ID, 'PRO' STATUS, date '2017-06-11' CREATE_DATE from dual union all
select 12345 APPLICATION_ID, 'REC' STATUS, date '2017-06-01' CREATE_DATE from dual union all
select 12345 APPLICATION_ID, 'PRO' STATUS, date '2017-06-02' CREATE_DATE from dual union all
select 12345 APPLICATION_ID, 'DEL' STATUS, date '2017-06-03' CREATE_DATE from dual
)
select *
from MY_TABLE
order by min(create_date) over(partition by APPLICATION_ID), APPLICATION_ID, CREATE_DATE
Это создает вывод, который вы перечислили.