HP Vertica每天95%的每小时数据

时间:2016-04-20 17:41:01

标签: vertica

我试图找到每小时所有值的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百分位值。

2 个答案:

答案 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