如何根据对日期列值的偏移量仅从表中获取一个条目

时间:2018-06-12 11:20:08

标签: sql sql-server join

我需要根据日期列上的偏移条件从表中获取值。 比如说:对于下面附表,如果有任何日期在15天内基于有效日期列出来,我应该只返回第一个日期。

Table Content

所以我的预期结果如下:

这里针对A1234政策,它返回6/18/16条目并跳过6/12/16条目,因为这两个日期之间的偏差在15天之内,我从列表中选取了最新的一条。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果要将彼此在15天内的行组合在一起,那么您就有了gap-and-islands问题的变体。我建议lag()和此版本的累积总和:

select polno, min(effectivedate), max(expirationdate)
from (select t.*,
             sum(case when prev_ed >= dateadd(day, -15, effectivedate)
                      then 1 else 0
                 end) over (partition by polno order by effectivedate) as grp
      from (select t.*,
                   lag(expirationdate) over (partition by polno order by effectivedate) as prev_ed
            from t
           ) t
      ) t
group by polno, grp;