Hi all,
i have a rather urgent problem with gathering statistics from a sql server table.
I would need to gather the median and the interquartile range for the records in the table that fulfill certain criteria.
I have written a query to calculate the median like this (kicked out the where clause):
select CASE WHEN COUNT(*)%2=1 THEN x.hospitalisatieduur ELSE (x.hospitalisatieduur+MIN(
CASE WHEN y.hospitalisatieduur>x.hos
pitalisati
eduur THEN y.hospitalisatieduur END))/2 END median FROM neonatologie x, neonatologie y GROUP BY x.hospitalisatieduur HAVING SUM(CASE WHEN y.hospitalisatieduur <= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)+1)/2 AND SUM(CASE WHEN y.hospitalisatieduur >= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)/2)+1
and i tried to get the 25th and 75th percentile like this
select CASE WHEN COUNT(*)%2=1 THEN x.hospitalisatieduur ELSE (x.hospitalisatieduur+MIN(
CASE WHEN y.hospitalisatieduur>x.hos
pitalisati
eduur THEN y.hospitalisatieduur END))/2 END median FROM neonatologie x, neonatologie y GROUP BY x.hospitalisatieduur HAVING SUM(CASE WHEN y.hospitalisatieduur <= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)+1)/4 AND SUM(CASE WHEN y.hospitalisatieduur >= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)/4*3)+1
select CASE WHEN COUNT(*)%2=1 THEN x.hospitalisatieduur ELSE (x.hospitalisatieduur+MIN(
CASE WHEN y.hospitalisatieduur>x.hos
pitalisati
eduur THEN y.hospitalisatieduur END))/2 END median FROM neonatologie x, neonatologie y GROUP BY x.hospitalisatieduur HAVING SUM(CASE WHEN y.hospitalisatieduur <= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)+1)/4*3 AND SUM(CASE WHEN y.hospitalisatieduur >= x.hospitalisatieduur THEN 1 ELSE 0 END)>=(count(*)/4)+1
i was hoping to be able to calculate the interquartile range from the 25th and 75th percentile, but sometimes the query's for the 25th or 75th percentile return more than 1 record, which is not supposed to happen.
anyone got working query's to perform these calculations?
fyi: i am connecting to a sql server database from c#, i know i could solve this in c# but i suppose it will consume more memory on the webserver. I would rather have this in a query/sproc