2016-11-21 5 views
0

に基づいて時系列パーティションを合計:のOracle SQL - 私はこのようになり、データ・セットで働いて月

MTD  | ID | Active 
----------------------- 
01-APR-16 | A | y 
01-MAY-16 | A | y 
01-JUN-16 | A | n 
01-JUL-16 | A | y 
01-AUG-16 | A | n 
01-APR-16 | B | n 
01-MAY-16 | B | y 
01-JUN-16 | B | y 
01-JUL-16 | B | y 
01-AUG-16 | B | y 

私は数をカウントするデータ・セットにカウント列を追加したいと思います現在のMTD後にIDがアクティブ( 'y')した回数。所望の出力は次のようになります。私は考えてい

MTD  | ID | Active | COUNT 
------------------------------- 
01-APR-16 | A | y  | 2 
01-MAY-16 | A | y  | 1 
01-JUN-16 | A | n  | 1 
01-JUL-16 | A | y  | 0 
01-AUG-16 | A | n  | 0 
01-APR-16 | B | n  | 4 
01-MAY-16 | B | y  | 3 
01-JUN-16 | B | y  | 2 
01-JUL-16 | B | y  | 1 
01-AUG-16 | B | y  | 0 

クエリは次のとおりです。私は窓の合計に現在のレコードのMTDに、各レコードのMTDを比較するかどうかはわかりません

SELECT 
MTD, 

ID, 

ACTIVE, 

SUM(CASE WHEN MTD > (current records MTD) 
      AND ACTIVE = 'y' THEN 1 ELSE 0 END) 
      OVER (PARTITION BY ID) 
    as COUNT 

。ケース・ステートメントの最初の行をどのように修正できますか?

が私に

ライアン・バーカー

+0

おそらくMTDでわずか '順はIDの後にオーバー以内desc'? – xQbert

答えて

3

rangeの指定でcount() over()を使用すると、アクティブなフラグyの現在の行(各ID)の次の行が表示され、カウントされます。これは、mtdが注文するためのdate列であることを前提としています。

SELECT 
MTD, 
ID, 
ACTIVE, 
COUNT(case when active='y' then 1 end) OVER(partition by ID order by mtd range between 1 following and unbounded following) 
FROM your_table 

Sample Demo

+0

私は次のキーワードが存在することを認識していませんでした。それは非常に便利です。ありがとうございました! –

0

、ありがとうあなたは逆に「Y」と行の数を合計するように、それが見えます。このようなもの:

select t.*, 
     greatest(sum(case when active = 'y' then 1 else 0 end) over (partition by id order by mtd desc) - 1, 
       0) 
from t; 

あなたの考えはかなり近いです。パーティション化節にはorder byが必要です。

+0

今月末にすべての "y"を合計したいと思います。これは近いが、それほどではない。 ACTIVE列にn、y、n、y、yがある場合、クエリは2、2、1、1、0の数を返します。私が探している数は3,2,2,1,0です。 –

+0

@RyanBarker。 。 。私はあなたのコメントの数をその質問の数とどのように解決するかは分かりません。あなたのMTDの使用は本当に役に立たない。この文脈では、私はこれが何を意味するのか分かりません。 –

+0

こんにちはゴードン、すみませんでした。 MTD =現在までの月間。レコードがいつ発生したかを表す値です。私はレコードが発生した後のアクティブな回数= 'y'を数えたいと思っています。 vkpの解説を参照してください:パーティション内のMTDによって1つの範囲と無制限の範囲との間の範囲を指定し、現在のレコードより1つ後のMTDから、カウントを行うときにのみデータセットの終わりまでを考慮します。それは理にかなっていますか? –

関連する問題