如果要在T-SQL中的多个列上中断数据,请添加Quartiles

问题描述 投票:0回答:1

我编写了以下查询,以按小时计算患者人口普查的第三个四分位数,并且有效。但是,我希望能够添加星期几,并且仍然会产生相同的结果,以便我可以看到数据如何因小时和星期几而变化。

目前我的结果如下:

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个不同的列?我没有正确的SQL Server 2012形式来使用PERCENTILE_CONT。请指教。

这是我的汇总人口普查数据的查询,并最终添加到第三个四分位数:

--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]
sql-server tsql
1个回答
0
投票

这是一个猜测,因为我没有使用四分位函数,但你提到:

我不认为我可以通过2个不同的列进行分区

你错了。 PARTITION BYORDER 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]
© www.soinside.com 2019 - 2024. All rights reserved.