如何使用Oracle sql将第一个日期放在最上面,其余日期按相反顺序排列?
当我使用order by轻松获得这样的查询结果时 姓名|日期如何使用Oracle sql将第一个日期放在最上面,其余日期按相反顺序排列?,oracle,Oracle,当我使用order by轻松获得这样的查询结果时 姓名|日期 Kev 2018/3/29 李2018/3/28 Mel 2018/3/27 菲奥娜2018/3/26 < BR> Jason 2018/3/25 但是现在我如何实现以下排序结果呢 姓名|日期 Jason 2018/3/25 Kev 2018/3/29 李2018/3/28 Mel 2018/3/27 菲奥娜2018/3/26 < P> min(dt)< /代码>是最早的日期。code>min(dt)over()是一个分析函数,它
Kev 2018/3/29
李2018/3/28
Mel 2018/3/27
菲奥娜2018/3/26 < BR> Jason 2018/3/25 但是现在我如何实现以下排序结果呢 姓名|日期
Jason 2018/3/25
Kev 2018/3/29
李2018/3/28
Mel 2018/3/27
菲奥娜2018/3/26 < P> <代码> min(dt)< /代码>是最早的日期。code>min(dt)over()是一个分析函数,它计算最小日期,并将其作为“组合”列添加到查询中的每一行。然后,如果前两个参数相等,
decode
将生成null
,反之则生成dt
。我按照这个结果降序排列,首先使用null
——因此最早的日期将显示在顶部,其他行按dt
降序排列
create table t ( name varchar2(20), dt date );
insert into t
select 'Jason', to_date('2018/3/25', 'yyyy/mm/dd') from dual union all
select 'Kev' , to_date('2018/3/29', 'yyyy/mm/dd') from dual union all
select 'Lee' , to_date('2018/3/28', 'yyyy/mm/dd') from dual union all
select 'Mel' , to_date('2018/3/27', 'yyyy/mm/dd') from dual union all
select 'Fiona', to_date('2018/3/26', 'yyyy/mm/dd') from dual
;
commit;
alter session set nls_date_format = 'yyyy/mm/dd';
select name, dt
from t
order by decode(dt, min(dt) over (), null, dt) desc nulls first
;
NAME DT
-------------------- ----------
Jason 2018/03/25
Kev 2018/03/29
Lee 2018/03/28
Mel 2018/03/27
Fiona 2018/03/26
您的示例与标题不匹配。它不会把最后一行放在上面,而是放在第一行。其他行不是按顺序排列的,而是按降序排列的。请编辑标题或示例,使它们相互一致;但是你“想要达到”的结果仍然有第一个日期在上面,其余日期的顺序相反。那么标题错了?修起来这么难吗?我很尴尬。作为一个中国代码农民,英语真的是最大的短板,我总是一文不值。