【问题标题】:Get date nearest to sysdate获取最接近 sysdate 的日期
【发布时间】:2015-03-23 16:24:28
【问题描述】:

我想得到每 N 个 max(date)

测试数据

CREATE TABLE DATTEST (N NUMBER, D DATE);

INSERT INTO DATTEST (N,D) VALUES (1,TRUNC(SYSDATE-2000));
INSERT INTO DATTEST (N,D) VALUES (1,TRUNC(SYSDATE-1000));
INSERT INTO DATTEST (N,D) VALUES (1,TRUNC(SYSDATE+100));

INSERT INTO DATTEST (N,D)VALUES (2,TRUNC(SYSDATE));
INSERT INTO DATTEST (N,D)VALUES (2,TRUNC(SYSDATE+1000));


INSERT INTO DATTEST (N,D)VALUES (3,TRUNC(SYSDATE+1000));

到目前为止,我已经掌握了这个。它给出了正确的结果总线执行两个表扫描。我正在处理大型表,并且多次调用此查询。我一直在努力将其转换为单个表扫描。

with nums as 
    (SELECT LEVEL num
     FROM DUAL
     CONNECT BY LEVEL <= 3
    ) 
select 
num
,(nvl((select  max(d)
    from dattest
    where d <= trunc(sysdate)
    and n = num),
    (select min(d)
    from dattest
    where d > trunc(sysdate)
    and n = num))
)
from nums;

预期输出

1   26-06-12
2   23-03-15
3   17-12-17

【问题讨论】:

    标签: sql oracle date oracle11g


    【解决方案1】:

    使用带有一些条件逻辑的聚合怎么样?

    select id,
           coalesce(max(case when d <= trunc(sysdate) then d end),
                    min(d)
                   )
    from table t
    group by id;
    

    【讨论】:

    • 你应该使用 "
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2014-10-30
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多