2016-04-20 7 views
0

Ich habe versucht, die 95 Perzentile aller Werte pro Stunde zu finden und sie auf Tagesniveau anzuzeigen. Hier ist Schnipsel des Codes Ich arbeite an:95 Perzentil stündliche Daten pro Tag in HP Vertica

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'; 

Im Moment die Ergebnismenge gibt mir den gleichen Wert pro Stunde pro Tag, aber es hat nicht den 95-Perzentil-Wert für eine bestimmte Stunde pro Tag.

+1

Bitte fügen Sie einige Testdaten, tatsächlichen und gewünschten Ergebnisse ... – mauro

Antwort

0

Nur ein Gedanke, aber haben Sie versucht, PARAMETER_VALUE in einen der Datentypen umzuwandeln, die vom ORDER BY-Ausdruck (INTEGER, FLOAT, INTERVAL oder NUMERIC) akzeptiert werden?

Zum Beispiel könnten Sie versuchen, WITHIN GROUP (Reihenfolge von PARAMETER_VALUE :: FLOAT).

0

Sie müssen eine Aggregatabfrage am Anfang der Unterabfrage (Perzentil) hinzufügen. Entweder max/min (weil in jedem Umfang die Perzentile gleich sind) percentile_disc ist eine Analysefunktion, jedoch keine Aggregatfunktion

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 
+0

Dank #Laurel für die Bearbeitung meiner hässliches englisches Schreiben – yabchexu

Verwandte Themen