2016-07-15 9 views
1

のVerticaのDB内の中央値を取得する:表が<code>revenue</code>と呼ばれている、例えば、オーバーラップ時間帯

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 

トリッキーなことは、私は、各日付の中央値をしたくないですが、私はのための中央値の収益を計算したいです明確にする

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

:時間範囲は、> =毎日与えられ、例えば、結果は次のようになるであろう

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

これらのdaterange用にSQLスクリプトを書く方法はありますか?簡単なクエリ方法はありますか?私は多くの日数があるので、各daterange、次にunionで計算したくありません。

+0

編集考え出し。 –

+0

あなたが私たちからいただいたサンプルを使用して期待される結果に、xxx、yyy、zzzの期待値を与えることができますか?それらはレコードの収入の合計ですか?=その日付ですか? – Ash

+0

こんにちはアシュウィン、それは中央値です。私は更新しました。サンプルにはサンプルがほとんどないので、結果は重要ではありません。ちょうどそのアイデアを知りたい。 – yabchexu

答えて

2

これは役に立ちますか?

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

平均を計算しますが、ヒントを教えてください。私の投稿を参照してください – yabchexu

+0

私の悪い、typoのため – ydoow

+0

ハハnpは、重要な部分は、 – yabchexu

1

だけで賢明な目的の結果であなたの質問を

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 ;` 
関連する問題