Назначить флаг Y / N на основе активности за последние 12 месяцев - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю со списком пациентов больницы и хотел бы пометить каждую учетную запись пациента знаком "Y", если они были в больнице девять или более раз за последние 12 месяцев.

Я придумал это, которое бы работало нормально, если бы список пациентов был статичным и включал бы только 12-месячный период:

SELECT
ENC.HSP_ACCOUNT_ID,
ENC.PAT_MRN_ID,
ENC.ADT_ARRIVAL_DTTM,
case when count(distinct txn.hsp_account_id) over(partition by PAT.PAT_MRN_ID) >= 9 then 'Y' else 'N' end as familiar_face_yn
FROM CLARITY.F_ED_ENCOUNTERS ENC
WHERE ENC.SERVICE_DATE BETWEEN '1-JUL-17' AND '31-OCT-18'

Но я бы хотел запросить предыдущийданные за два года, но используйте только 12 месяцев до даты прибытия (ENC.ADT_ARRIVAL_DTTM) при вычислении Y или N.

Проблема, с которой я сталкиваюсь с вышеупомянутым запросом, состоит в том, что он собираетсяназад и подсчет всех посещений конкретного пациента в период с 1 июля 1997 года по 10 января 31 года.

Мне бы хотелось, чтобы дата прибытия записи была 18.08.18следует считать все посещения с 8/1/17 по 8/1/18, игнорируя что-либо с датой прибытия ранее, чем 8/1/17 или позже, чем 8/1/18.

Является ли это "прокатный "расчет возможен?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы можете использовать выражение для окон:

SELECT ENC.HSP_ACCOUNT_ID, ENC.PAT_MRN_ID, ENC.ADT_ARRIVAL_DTTM,
       (CASE WHEN COUNT(DISTINCT txn.hsp_account_id) OVER
                      (PARTITION BY PAT.PAT_MRN_ID
                       ORDER BY ENC.SERVICE_DATE
                       RANGE BETWEEN 365 PRECEDING AND CURRENT ROW
                      ) >= 9 
             THEN 'Y' ELSE 'N' 
        END) as familiar_face_yn
FROM CLARITY.F_ED_ENCOUNTERS ENC
WHERE ENC.SERVICE_DATE BETWEEN DATE '2017-07-01' AND DATE '2018-10-31'
0 голосов
/ 12 декабря 2018
with cte as
 (
    SELECT
       ENC.HSP_ACCOUNT_ID,
       ENC.PAT_MRN_ID,
       ENC.ADT_ARRIVAL_DTTM,
       -- find the most recent visit
       max(ENC.ADT_ARRIVAL_DTTM) over(partition by PAT.PAT_MRN_ID) as last_date
    FROM CLARITY.F_ED_ENCOUNTERS ENC
    WHERE ENC.SERVICE_DATE BETWEEN '1-JUL-17' AND '31-OCT-18'
 )
select ...
   -- count all rows with within a 12 month range before the most recent visit
   case when count(distinct case when ADT_ARRIVAL_DTTM >= add_months(last_date, -12) then txn.hsp_account_id end)
             over (partition by PAT.PAT_MRN_ID) >= 9
        then 'Y'
        else 'N' 
   end as familiar_face_yn
from cte 

Не знаю, действительно ли вам нужен счет DISTINCT ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...