我需要对下面给出的数据进行排名

时间:2015-10-28 10:46:00

标签: sql db2

effective_date  termination_date  rank
1/1/2015        1/31/2015         1
2/1/2015        2/28/2015         1
3/3/2015        3/31/2015         2
4/1/2015        4/30/2015         2

基本上当previous termination_datecurrent effective_date之间存在差距时,我需要指定一个新的排名/值并继续排名/值,直到我找到current effective_date之间的新差距1}}和之前的termination_date

此外,不允许使用存储过程。请告诉我使用DB2查询实现此目的的方法

1 个答案:

答案 0 :(得分:1)

您可以使用窗口功能。以下使用lag()来确定连续期间的开始位置。然后累计对该标志求和以识别每个组:

select t.*, sum(IsStart) over (order by effective_date)
from (select t.*,
             (case when lag(termination_date) + 1 days >= effective_date
                   then 0 else 1
              end) as IsStart
      from t
     ) t;
相关问题