获取最接近 sysdate 的日期

Get date nearest to sysdate

我想获得每 N 个 max(date) <= sysdate。如果 past/today 中没有日期存在,我想要最小(日期)。所以我不想要最接近 sysdate 的绝对日期。

测试数据

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));

到目前为止我已经知道了。它给出了正确的结果总线进行了两次 table 扫描。我正在处理大型 tables,这个查询被调用了很多次。将其转换为单个 table 扫描时,我一直很头疼。

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

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

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