我试图找到每小时所有值的95%并在每日水平显示它们。以下是我正在处理的代码片段:
select distinct columnA
,date(COLLECTDATETIME) as date_stamp
,hour(COLLECTDATETIME) as hour_stamp
,PERCENTILE_DISC(0.95) WITHIN GROUP(order by PARAMETER_VALUE)
over (PARTITION BY hour(COLLECTDATETIME)) as max_per_day
from TableA
where
columnA = 'abc'
and PARAMETER_NAME = 'XYZ';
现在,结果集每天每小时给出相同的值,但它不是每天给定小时的95百分位值。
答案 0 :(得分:0)
只是一个想法,但您是否尝试将PARAMETER_VALUE转换为ORDER BY表达式(INTEGER,FLOAT,INTERVAL或NUMERIC)接受的数据类型之一?
例如,您可以尝试使用WITHIN GROUP(按PARAMETER_VALUE :: FLOAT排序)。
答案 1 :(得分:0)
您需要在子查询的顶部添加聚合查询(百分位数)。最大/最小值(因为在每个范围内百分位数相同)percentile_disc
是分析函数但不是聚合函数
SELECT dateid,
hour,
MAX(max_per_day) as max_per_day
FROM (
SELECT date(COLLECTDATETIME) AS dateid,
hour(COLLECTDATETIME) AS hour,
percentile_disc(0.95) WITHIN GROUP(order by PARAMETER_VALUE) OVER (PARTITION BY date(COLLECTDATETIME), hour(COLLECTDATETIME)) as max_per_day
WHERE ......
)
GROUP BY dateid, hour