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
它会创建您列出的输出。
我需要按下面的创建日期列对我的总体结果进行排序,但将它们按应用程序 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
它会创建您列出的输出。