2017-08-07 73 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」爲他們的休息。預期的數據應該像

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 

我做什麼,我合影的一年分鐘(日期)和加載數據到臨時表中,並加入回到實際的表,並寫了一個case語句。但我想這可以在一個選擇語句中解決。

在此先感謝

回答

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