当您想中断T-SQL中多列数据时添加四分位数

时间:2018-12-11 20:47:52

标签: sql-server tsql

我编写了以下查询,以按小时进行患者普查的第三个四分位数,并且该方法有效。但是,我希望能够添加“星期几”,并且仍然产生相同的结果,以便我可以看到数据根据“小时”和“星期几”如何变化。

当前我的结果如下:

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]

1 个答案:

答案 0 :(得分:0)

这有点猜测,因为我没有使用四分位数功能,但是您提到:

  

我认为我不能按2个不同的列进行分区

您在想错。 PARTITION BY子句的ORDER BYOVER部分都接受多个参数。因此,尝试将第二个查询更改为:

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]