Je demande un ensemble de résultats de patients qui ont été admis à l'hôpital pendant la période allant du 1er janvier 2016 au 31 décembre 2016 et qui sont décédés.

Dans le cadre de l'ensemble de résultats, je dois inclure une colonne (`` Nombre d'admissions antérieures '') qui donne le total de toutes les admissions antérieures que le patient a eues au cours de la période de 12 mois jusqu'à la date de son admission finale.

Ainsi, si un patient a été admis le 1er juin 2016 et est décédé, et a 2 admissions précédentes le 1er juillet 2015 et le 30 septembre 2015, le total serait de «2» dans cette colonne.

La logique doit donc être la suivante: si le patient a été admis le xx / xx / xxxx date et est décédé, compter le nombre d'admissions antérieures pour le même patient dont la date d'admission se situe dans les 365 jours à compter du xx / xx / xxxx.

J'ai essayé de faire cela en tant que sous-requête suivante, mais j'ai 2 problèmes:

1) la requête semble compter tous les enregistrements d'admissions dans le tableau, plutôt que ceux relatifs au patient individuel.

2) le résultat exclut tous les patients dont la seule présence était la dernière (c'est-à-dire qu'ils n'avaient pas de présence préalable). S'ils n'ont pas de présence préalable, je veux qu'un 0 apparaisse dans la colonne.

Quelqu'un peut-il donner des conseils sur la bonne approche / syntaxe?

Voici la sous-requête que j'ai tentée:

SELECT DISTINCT
EP.Patient_Id
,EP.Admission_Date 'Final Admission Date'
,(
    SELECT COUNT(*)
    FROM Inpatients.vw_IP_Episodes IP
    WHERE DATEDIFF(day,IP.Admission_Date,EP.Admission_Date) < '365'
    AND IP.Discharge_Method != 'Patient died'
 ) 
 AS 'No of Prior Admissions'

FROM Inpatients.vw_IP_Episodes EP
WHERE EP.Admission_Date BETWEEN '01/01/2016' AND '31/12/2016'
AND EP.Discharge_Method = 'Patient died'

GROUP BY EP.Patient_Id, EP.Admission_Date
1
Jon295087 5 avril 2017 à 18:25

2 réponses

Meilleure réponse

Grâce à la discussion avec les autres, voici la solution:

SELECT DISTINCT
EP.Patient_Id
,EP.Admission_Date 'Final Admission Date'
,(
    SELECT COUNT(DISTINCT IP.Admission_Date)
    FROM Inpatients.vw_IP_Episodes IP
    WHERE IP.Admission_Date >= DATEADD(day, -365, EP.Admission_Date)
    AND IP.Patient_Id = EP.Patient_Id
    AND IP.Discharge_Method != 'Patient died'
 ) 
 AS 'No of Prior Admissions'

FROM Inpatients.vw_IP_Episodes EP
WHERE EP.Admission_Date BETWEEN '01/01/2016' AND '31/12/2016'
AND EP.Discharge_Method = 'Patient died'

GROUP BY EP.Patient_Id, EP.Admission_Date
0
Jon295087 7 avril 2017 à 09:16

CTE est peut-être le meilleur pour supprimer les doublons.

;WITH cte AS(SELECT EP.Patient_Id
        ,EP.Admission_Date 'Final Admission Date'
        , ROW_NUMBER() OVER (PARTITION BY EP.Patient_Id ORDER BY EP.Admission_Date DESC) AS Rownum  
        , (SELECT  COUNT(*) AS [No of Prior Admissions]
                FROM Inpatients.vw_IP_Episodes IP
                WHERE Admission_Date >= DATEADD(day, -365, EP.Admission_Date)
                AND Admission_Date < EP.Admission_Date
                AND IP.Patient_Id = EP.Patient_Id
                ) [No of Prior Admissions]
    FROM Inpatients.vw_IP_Episodes EP
    WHERE EP.Admission_Date BETWEEN '01/01/2016' AND '31/12/2016'
    AND EP.Discharge_Method = 'Patient died'
)

SELECT *
FROM cte
WHERE Rownum = 1;
-1
Wendy 7 avril 2017 à 15:35