Oracle:按日期对结果进行排序,子组按同一日期排序

Oracle: Sort results by date with subgroup by the same date

我需要按下面的创建日期列对我的总体结果进行排序,但将它们按应用程序 ID 分组在一起,这些子组按相同的日期排序,如下所示:

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

如果您想按应用程序最短创建日期排序,请考虑以下事项:

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

它会创建您列出的输出。