【问题标题】:Oracle: Sort results by date with subgroup by the same dateOracle:按日期对结果进行排序,子组按相同日期
【发布时间】:2018-06-18 11:30:19
【问题描述】:

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

【问题讨论】:

  • 那么,你得到的输出是什么?请出示一下
  • 我们需要相关的数据模型部件来帮助您...

标签: oracle sorting date sql-order-by


【解决方案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

它会创建您列出的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多