【发布时间】:2019-04-06 01:50:53
【问题描述】:
我的目标是计算在 3 家医院等待接受服务 5 期的患者的第 90 个百分位等待时间的累积值。
每个时间段对应一个特定的时间线(例如,时间段 1 (P01) 表示患者在 2018 年 4 月 1 日至 2018 年 5 月 3 日之间接受过服务,时间段 2(P02,2018 年 5 月 5 日至 5 月之间的服务) 2018 年 3 月 31 日)。
我的原始查询非常复杂,这里是它的简化版本。 我的表格由 3 列组成:
CREATE TABLE Mytable1(
period varchar2(10),
hospital varchar2(100),
wait_days int
);
然后插入等待时间的值(以天为单位),每个医院五个,因为有 5 个周期。
INSERT ALL
INTO Mytable1(period,hospital,wait_days) VALUES ('P01', 'NANAIMO HOSPITAL',182)
INTO Mytable1(period,hospital,wait_days) VALUES ('P02','NANAIMO HOSPITAL',187)
INTO Mytable1(period,hospital,wait_days) VALUES ('P03','NANAIMO HOSPITAL',188)
INTO Mytable1(period,hospital,wait_days) VALUES ('P04','NANAIMO HOSPITAL',182)
INTO Mytable1(period,hospital,wait_days) VALUES ('P05','NANAIMO HOSPITAL',190)
INTO Mytable1(period,hospital,wait_days) VALUES ('P01','VICTORIA HOSPITAL',230)
INTO Mytable1(period,hospital,wait_days) VALUES ('P02','VICTORIA HOSPITAL',241)
INTO Mytable1(period,hospital,wait_days) VALUES ('P03','VICTORIA HOSPITAL',245)
INTO Mytable1(period,hospital,wait_days) VALUES ('P04','VICTORIA HOSPITAL',237)
INTO Mytable1(period,hospital,wait_days) VALUES ('P05','VICTORIA HOSPITAL',240)
INTO Mytable1(period,hospital,wait_days) VALUES ('P01','ARBUTUS HOSPITAL',156)
INTO Mytable1(period,hospital,wait_days) VALUES ('P02','ARBUTUS HOSPITAL',163)
INTO Mytable1(period,hospital,wait_days) VALUES ('P03','ARBUTUS HOSPITAL',144)
INTO Mytable1(period,hospital,wait_days) VALUES ('P04','ARBUTUS HOSPITAL',158)
INTO Mytable1(period,hospital,wait_days) VALUES ('P05','ARBUTUS HOSPITAL',165)
SELECT 1 FROM DUAL;
现在我使用没有 Group By 子查询的分析版本来计算第 90 个百分位的等待时间:
SELECT period, hospital,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY wait_days) OVER (PARTITION BY hospital) as percentile
FROM Mytable1
order by period, hospital;
这是我的结果:
PERIOD HOSPITAL PERCENTILE
P01 ARBUTUS HOSPITAL 164.2
P01 NANAIMO HOSPITAL 189.2
P01 VICTORIA HOSPITAL 243.4
P02 ARBUTUS HOSPITAL 164.2
P02 NANAIMO HOSPITAL 189.2
P02 VICTORIA HOSPITAL 243.4
P03 ARBUTUS HOSPITAL 164.2
P03 NANAIMO HOSPITAL 189.2
P03 VICTORIA HOSPITAL 243.4
P04 ARBUTUS HOSPITAL 164.2
P04 NANAIMO HOSPITAL 189.2
P04 VICTORIA HOSPITAL 243.4
P05 ARBUTUS HOSPITAL 164.2
P05 NANAIMO HOSPITAL 189.2
P05 VICTORIA HOSPITAL 243.4
我在每个时期都得到相同的第 90 个百分位。我想知道如何获得每个后续期间的第 90 个百分位数的累积值。基本上,我需要根据添加上一期的结果来计算第 90 个百分位数,预计第 90 个百分位数的值会略有不同(下面是我想要得到的示例):
P01 ARBUTUS HOSPITAL 164.2
P02 (=P01+P02) ARBUTUS HOSPITAL 165
P03(=P01+P02+P03) ARBUTUS HOSPITAL 162
P04 (=P01+P02+P03+P04) ARBUTUS HOSPITAL 163
P05(=P01+P02+P03+P04+P05) ARBUTUS HOSPITAL 164
你能帮忙吗?谢谢!
附:我之前问过一个关于第 90 个百分位数计算的问题,但它与另一个问题有关。
【问题讨论】:
-
尝试按时间段分组,然后聚合
标签: sql oracle percentile