我编写了以下查询,以按小时进行患者普查的第三个四分位数,并且该方法有效。但是,我希望能够添加“星期几”,并且仍然产生相同的结果,以便我可以看到数据根据“小时”和“星期几”如何变化。
当前我的结果如下:
Hour 3rd Quartile Census
---------------------------
0 10
1 9
2 8
3 9
4 9
... ...
我希望能够添加DOW,所以看起来像这样:
DOW Hour 3rd Quartile Census
------------------------------
Fri 0 9
Fri 1 9
Fri 2 8
...
Sat 0 9
Sat 1 10
Sat 2 11
...
我正在努力,因为我不认为我可以按2个不同的列进行分区?而且我没有使用PERCENTILE_CONT
的正确形式的SQL Server 2012。请告知。
这是我要汇总人口普查数据并最终添加第三个四分位数的查询:
--Aggregated Census Table
SELECT
[Hospital],
[Date], [Hour],
SUM(minutes) / 60.0 AS [patientcensus]
INTO
#Temp
FROM
#Observation
GROUP BY
[Hospital], [Date], [Hour]
ORDER BY
[Hospital], [Date], [Hour]
--Do third quartile without DOW
SELECT [Date], [Hour], [patientcensus]
INTO #temp2
FROM #temp
SELECT
[Hour], [patientcensus],
NTILE(100) OVER (PARTITION BY [Hour] ORDER BY [patientcensus] ASC) percentile
INTO
#percentiles
FROM
#temp2
ORDER BY
[Hour], [patientcensus]
SELECT
[Hour],
MIN(patientcensus) as '3rd Quartile Census'
FROM
#percentiles
WHERE
percentile = 75
GROUP BY
[Hour]
答案 0 :(得分:0)
这有点猜测,因为我没有使用四分位数功能,但是您提到:
我认为我不能按2个不同的列进行分区
您在想错。 PARTITION BY
子句的ORDER BY
和OVER
部分都接受多个参数。因此,尝试将第二个查询更改为:
SELECT
[Date],[Hour], [patientcensus],
NTILE(100) OVER (PARTITION BY [Date],[Hour] ORDER BY [patientcensus] ASC) percentile
INTO
#percentiles
FROM
#temp2
ORDER BY
[Date],[Hour], [patientcensus]