1

我有一个包含监狱设施数据的表格,格式如下:

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 天。

这意味着如果同一个囚犯已经被收监 2 次,如果他的第二次收监日期和他第一次出院的日期之间的差异小于 60 天,我们就将其计算为 1 次重新入狱。

此外,如果一名囚犯已入狱 3 次,如果其第三次出院日期与第二次入狱日期之间的差值以及第二次出院日期与第一次入狱日期之间的差值,我们将其视为 2 次再入院时间都少于60天。如果其中一个少于 60 天,而另一个不是,则算作 1 次重新入院。如果其中没有一个少于 60 天,则视为零再入院。

如何在 SQL 或 PostgreSQL 中执行此操作?非常感谢您的帮助。

4

1 回答 1

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;
于 2018-07-02T11:21:33.803 回答