2016-07-15 19 views
1

vertica db, hat zum Beispiel eine Tabelle revenue genannt:erhält Median in Überlappungszeitbereich

date    revenue 
2016-07-12   1 
2016-07-12   10 
2016-07-12   5 
2016-07-12   3 
2016-07-13   7 
2016-07-13   120 
2016-07-13   22 
2016-07-14   5 
2016-07-14   17 

Die heikele Sache ist, ich für jedes Datum nicht Median will, aber ich mag die Median Einnahmen berechnen für die Timerange> = jeden Tag gegeben, zum Beispiel wäre das Ergebnis wie:

daterange  median_revenue 
>= 2016-07-12   7 
>= 2016-07-13   17 
>= 2016-07-14   11 

klar sein:

7 = median(1,10,5,3,7,120,22,5,17) 
17 = median(7,120,22,5,17) 
11 = median(5,17) 

Wie könnte ich ein SQL-Skript für diesen Datumsbereich schreiben? Gibt es eine einfache Möglichkeit zur Abfrage? Ich will nicht in jedem Datumsbereich dann Union berechnen, weil es viele Tage gibt.

+0

Bearbeiten Sie Ihre Frage mit vernünftigen gewünschten Ergebnisse. –

+0

In Ihrem erwarteten Ergebnis mit der Probe, die Sie uns gaben, können Sie die erwarteten Werte für xxx, yyy und zzz geben? Sind sie die Summe der Einnahmen für Datensätze> = diese Daten? – Ash

+0

Hallo Ashwin, es ist der Median. Ich habe aktualisiert. Da das Beispiel sehr wenige Stichproben enthält, ist das Ergebnis nicht wichtig. Ich will nur die Idee wissen. – yabchexu

Antwort

2

Würde dies helfen?

SELECT 
    date_table.[date], 
    MEDIAN (r.revenue) AS median_revenue 
FROM 
    (SELECT DISTINCT [date] FROM revenue) date_table 
LEFT JOIN revenue r ON r.[date] >= r_main.[date] 
GROUP BY 
    date_table.[date] 
+0

obwohl Sie den Durchschnitt berechnen, aber geben Sie mir einige Hinweise. siehe meinen Beitrag unter – yabchexu

+0

mein schlechter, für den Tippfehler – ydoow

+0

haha ​​np, ist der wichtige Teil der Join-Zeug – yabchexu

1

gerade herausgefunden

select distinct date, median(revenue) over (partition by date) as rev_median 
from (select a.date,b.revenue 
     from (select distinct date from revenue_test) a 
     left outer join revenue b 
      on a.date<=b.date order by a.date,b.date) a ;`