2017-08-07 11 views
0

こんにちは私は顧客テーブルの次のデータを持っています。フラグ付き年間最低日時

CUST_ID  DATE 
ab13563590 6/1/2008 
ab13563591 1/1/2008 
ab13563592 2/1/2008 
ab13563593 8/1/2010 
ab13563594 7/1/2010 
ab13563595 9/1/2008 
ab13563596 4/1/2008 
ab13563597 10/1/2008 
ab13563598 3/1/2009 
ab13563599 5/1/2009 

残りの部分については、毎年の最低日が 'Y'と 'N'になる計算済みフラグが必要です。予想されるデータは、私が、私は一時テーブルに分(日付)とロードされたデータとの年でグループを取り、実際のテーブルに戻って参加し、case文を書いたのは何

CUST_ID  DATE FLAG 
ab13563590 6/1/2008 N 
ab13563591 1/1/2008 Y 
ab13563592 2/1/2008 N 
ab13563593 8/1/2010 N 
ab13563594 7/1/2010 Y 
ab13563595 9/1/2008 N 
ab13563596 4/1/2008 N 
ab13563597 10/1/2008 N 
ab13563598 3/1/2009 Y 
ab13563599 5/1/2009 N 

のようになります。しかし、私はそれが単一のselectステートメントで解決できると思います。事前

答えて

2

にあなたは、この使用してウィンドウの機能を解決することができます

ありがとう:

SELECT cust_id, 
    date, 
    CASE WHEN date = min(date) OVER (PARTITION BY EXTRACT(YEAR FROM date) ORDER BY date) THEN 'Y' ELSE 'N' END AS Flag 
FROM table; 

年の日付の最小値を現在の行の日付を比較します。彼らが等しい場合、あなたは 'Y'を取得します。

+0

パーフェクト、迅速な回答に感謝を。 – neoo

1

これを試してみてください:

select cust_id,date, 
case 
when date = (select min(date) as min_date from customer where to_char(cust.date,'yyyy') = to_char(date,'yyyy')) 
then 'Y' else 'N' end as flag 
from customer cust