我在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
谢谢..
答案 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