如何使用Netezza计算连续日期

问题描述 投票:0回答:1

我需要连续数天才能定义群组。我有一个表格,看起来像:

pat_id         admin_date
----------------------------
1              3/10/2019
1              3/11/2019
1              3/23/2019
1              3/24/2019
1              3/25/2019
2              12/26/2017
2              2/27/2019
2              3/16/2019
2              3/17/2019 

我想要这样的输出:

pat_id         admin_date      consecutive
--------------------------------------------
1              3/10/2019            1
1              3/11/2019            2
1              3/23/2019            1
1              3/24/2019            2
1              3/25/2019            3
2              12/26/2017           1
2              2/27/2019            1
2              3/16/2019            1
2              3/17/2019            2

,以便我可以使用这些连续的天数(每个pat_id)来筛选我的同类群组。我见过一些建议将DateDiff / DateAdd与row_number一起使用的帖子,例如:

datediff(day, -row_number() over (partition by mrn order by admin_date), admin_date) 

但是datediff / dateadd函数在Netezza上不起作用...

到目前为止,我最接近的是:

select row_number() over (partition by mrn order by administration_date) as consecutive 

无法识别日期之间的间隔并返回这样的输出:

pat_id         admin_date      consecutive
--------------------------------------------
1              3/10/2019            1
1              3/11/2019            2
1              3/23/2019            3
1              3/24/2019            4
1              3/25/2019            5
2              12/26/2017           1
2              2/27/2019            2
2              3/16/2019            3
2              3/17/2019            4

有人知道如何解决吗?

sql count netezza
1个回答
0
投票

使用lag()查看组的起始位置和累积和以定义组。其余的只是row_number()

select t.*,
       row_number() over (partition by pat_id, grp order by admin_date) as consecutive
from (select t.*,
             sum( case when prev_ad = admin_date - interval '1 day' then 0 else 1 end) over
                 (partition by pat_id order by admin_date) as grp
      from (select t.*, 
                   lag(admin_date) over (partition by pat_id order by admin_date) as prev_ad
            from t
           ) t
     )t ;
© www.soinside.com 2019 - 2024. All rights reserved.