我有一个表格,其中包含监狱设施的数据,格式如下:
Prisoner_id admission date discharge date
---------------------------------------------------
1325 06/13/2014 09/13/2014
1266 05/01/2014 07/02/2014
1325 02/21/2015 07/23/2015
1471 02/26/2014 04/20/2014
1266 10/19/2014 12/22/2014
1325 10/09/2015 11/10/2015
我需要计算每个囚犯的再入院数量;也就是说,每个囚犯已再次被送进设施的次数,以使他最后一次进入设施的准入日期(他进入的日期)与他之前的出院日期(他被放走的日期)之间的时间差最后不到60天。
这意味着,如果同一囚犯已被接纳两次,那么如果第二次接纳日期与第一次出院日期之间的差额小于60天,则我们将其计为1次重新接纳。
此外,如果囚犯已被接纳3次,则我们将其视为两次重新接纳,前提是其第三次出院日期与第二次入院日期之间的差额以及第二次其出院日期与其入场之间的差额第一次约会都少于60天。如果其中一个少于60天,但另一个不是,则计为1次再入院。如果它们都不少于60天,则计为零重新接纳。
如何在SQL或PostgreSQL中做到这一点?非常感谢您的帮助。
答案 0 :(得分:0)
我认为您只需要lag()
和一些查询逻辑:
以下内容获取组:
select t.prisoner_id,
sum( (prev_dd > admission_date - interval '60 day')::int ) as num_readmissions
from (select t.*,
lag(discharge_date) over (partition by prisoner_id) as prev_dd
from t
) t
group by prisoner_id;