嗨,我正在研究 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。使用常规选择查询?提前致谢
嗨,我正在研究 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。使用常规选择查询?提前致谢
有两个函数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
我们可以简单地使用下面的查询,简单明了。不需要pl/sql
SELECT MIN(DATE) FROM DATE_TABLE WHERE DATE > SYSDATE ;