Я тоже работаю в NHS, вот SQL, который я написал, чтобы узнать медиану, МАКС и 95-й процентиль
проверить это и напишите мне kali.tummala@gmail.com
WITH kali1 ( k1, k2, k3, k4, k5, k6, k7 )
AS ( SELECT MinsInAE ,
HoursInAE ,
DaysInAE AS DaysInAE ,
Month_Name ,
YearName ,
InternalNo ,
ROW_NUMBER() OVER ( PARTITION BY Month_Name ORDER BY MinsInAE ASC ) AS 'Row Number'
FROM AE.FactAandE
INNER JOIN AE.PMI ON AE.FactAandE.FK_PaitentMasterIndex = AE.PMI.PK_Patient
INNER JOIN dbo.TimeDimension ON dbo.TimeDimension.DateId = AE.FactAandE.FK_date
WHERE YearName = 'Calendar 2010'
),
kali2 ( k21, k22, k23 )
AS ( SELECT MAX(k7) * 95 / 100 ,
k4 ,
MAX(k7)
FROM kali1
GROUP BY k4
),
kali3 ( k31, k32 )
AS ( SELECT AVG(1.0E * MinsInAE) AS Median ,
Month_Name
FROM ( SELECT MinsInAE ,
Month_Name ,
2
* ROW_NUMBER() OVER ( PARTITION BY Month_Name ORDER BY MinsInAE )
- COUNT(*) OVER ( PARTITION BY Month_Name ) AS y
FROM AE.FactAandE
INNER JOIN AE.PMI ON AE.FactAandE.FK_PaitentMasterIndex = AE.PMI.PK_Patient
INNER JOIN dbo.TimeDimension ON dbo.TimeDimension.DateId = AE.FactAandE.FK_date
WHERE YearName = 'Calendar 2010'
) AS d
WHERE y BETWEEN 0 AND 2
GROUP BY Month_Name
),
kali4 ( k41, k42, k43, k44, k46, k47 )
AS ( SELECT MinsInAE ,
HoursInAE ,
DaysInAE AS DaysInAE ,
Month_Name ,
YearName ,
InternalNo
FROM AE.FactAandE
INNER JOIN AE.PMI ON AE.FactAandE.FK_PaitentMasterIndex = AE.PMI.PK_Patient
INNER JOIN dbo.TimeDimension ON dbo.TimeDimension.DateId = AE.FactAandE.FK_date
WHERE YearName = 'Calendar 2010'
),
kali5 ( k51, k52, k53 )
AS ( SELECT kali2.k22 AS Month_Name ,
( kali1.k1 ) AS percentilevalue ,
kali2.k21 AS percentilerow
FROM kali2
INNER JOIN kali1 ON kali1.k4 = kali2.k22
WHERE kali1.k7 = kali2.k21
)
SELECT kali3.k31 AS Median ,
kali3.k32 AS Month_Name ,
MAX(kali4.k41) AS Max_Mins_In_AE ,
SUM(kali4.k41) AS Mins_IN_AE ,
kali5.k51 AS Month_Name ,
kali5.k52 AS percentile
FROM kali3
LEFT JOIN kali4 ON kali3.k32 = kali4.k44
LEFT JOIN kali5 ON kali5.k51 = kali3.k32
GROUP BY kali3.k31 ,
kali3.k32 ,
kali5.k51 ,
kali5.k52