根据第一行日期查找最近的下一个日期

时间:2015-12-06 08:54:54

标签: sql postgresql

我在postgresql db中有一个表如下:

sl_no | valid_from | 
--------------------
  1      02-04-2013
  2      02-09-2012
  3      02-11-2015
  4      02-01-2011
  5      02-10-2015

我希望将所有行orderby valid_from以及一个虚拟列名称作为valid_to。这里,valid_to的值应该来自每个valid_from值的最近的下一个日期。

如下所示:

sl_no | valid_from | valid_to |
---------------------------------
  4      02-01-2011  02-09-2012
  2      02-09-2012  02-04-2013
  1      02-04-2013  02-10-2015
  5      02-10-2015  02-11-2015 
  3      02-11-2015  02-11-2015

谢谢..

1 个答案:

答案 0 :(得分:0)

lead()会这样做:

select sl_no, valid_from, 
       lead(valid_from, 1, valid_from) over (order by valid_from) as valid_to
from the_table
order by valid_from;

lead()选择 next 行(由order by定义)的指定列的列值。参数1, valid_from指定数据库应该提前1行,如果没有这样的行,则返回第三个参数。 lead(valid_from)lead(valid_from, 1, null)的缩写形式。

设置手册以获取详细信息:

SQLFiddle考试:http://sqlfiddle.com/#!15/61d53/1