如何使用 Netezza 计算连续日期
How to count consecutive dates using Netezza
我需要计算连续的天数才能定义我的同类群组。我有一个 table 看起来像:
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
无法识别日期之间的间隔和 return 这样的输出:
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
有谁知道如何解决这个问题?
使用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 ;
我需要计算连续的天数才能定义我的同类群组。我有一个 table 看起来像:
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
无法识别日期之间的间隔和 return 这样的输出:
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
有谁知道如何解决这个问题?
使用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 ;