计算Postgresql

时间:2018-07-02 09:14:51

标签: sql postgresql

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

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中做到这一点?非常感谢您的帮助。

1 个答案:

答案 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;