Подсчет реадмиссий в postgresql - PullRequest
0 голосов
/ 02 июля 2018

У меня есть таблица с данными для тюремного учреждения следующего формата:

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 раза, мы считаем это 1 повторной госпитализацией, если разница между датой его поступления во второй раз и датой его выписки в первый раз составляет менее 60 дней.

Кроме того, если заключенный был допущен 3 раза, мы считаем это 2 повторными допусками, если разница между датой его выписки в третий раз и датой его поступления во второй раз И разницей между датой его выписки во второй раз и его поступлением Дата первого раза меньше 60 дней. Если один из них менее 60 дней, а другой - нет, считается 1 повторный прием. Если ни один из них не менее 60 дней, считайте ноль реадмиссий.

Как я могу сделать это в SQL или PostgreSQL? Ваша помощь очень ценится.

1 Ответ

0 голосов
/ 02 июля 2018

Я думаю, вы просто хотите 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...