3

嗨,我正在研究 oracle DB。数据库有一列日期。它由 5 年的日期组成,日期模型将被刷新。前任

DATE_TABLE

DATE 
------------
1-jan-2013
15-jan-2013
31-jan-2013
6-feb-2013
etc.........

现在假设今天的日期13th jan 2013。下一个刷新日期将是15th jan。之前的刷新日期是1st jan。检索这两个日期。我有什么办法不使用 PL/SQL。使用常规选择查询?提前致谢

4

2 回答 2

4

有两个函数LAG()(允许您参考上一条记录)和LEAD()允许您参考下一条记录。这是一个例子:

SQL> with t1(col) as(
  2    select '1-jan-2013'  from dual union all
  3    select '15-jan-2013' from dual union all
  4    select '31-jan-2013' from dual union all
  5    select '6-feb-2013'  from dual
  6  )
  7  select col                            as current_value
  8       , lag(col, 1) over(order by col) as prev_value
  9       , lead(col, 1) over(order by col)as next_value
 10    from t1
 11  ;

结果:

CURRENT_VALUE   PREV_VALUE    NEXT_VALUE
-------------   -----------   -----------
1-jan-2013      NULL          15-jan-2013
15-jan-2013     1-jan-2013    31-jan-2013
31-jan-2013     15-jan-2013   6-feb-2013
6-feb-2013      31-jan-2013   NULL
于 2013-08-14T07:47:21.630 回答
1

我们可以简单地使用下面的查询,简单明了。不需要pl/sql

SELECT MIN(DATE) FROM DATE_TABLE WHERE DATE > SYSDATE ;
于 2015-01-04T07:31:01.283 回答