2014-06-17 25 views
1

這是示例數據。DB2查詢 - 選擇上一個相鄰月份直到不存在?

KEY | MONTH | NAME 
    ------------------- 
    13 | 201311 | A 
    24 | 201310 | B 
    77 | 201309 | C 
    19 | 201307 | D 
    15 | 201304 | E 

我想選擇上一個相鄰的月份,直到不存在。

我希望結果是這樣的。

KEY | MONTH | NAME 
    ------------------- 
    13 | 201311 | A 
    24 | 201310 | B 
    77 | 201309 | C 

假設當前月份爲201312.

回答

0

對於您擁有的數據,你可以這樣做:

select t.m_key, t.name 
from (select t.*, 
      m_key + row_number() over (order by m_key) as grp 
     from table t 
    ) t 
where grp = (select max(m_key) + 1 from table t); 

我說:「對,你擁有的數據」,因爲它目前還不清楚當你通過一年的邊界時會發生。處理這種情況有點複雜,因爲當他們之間的差異不是1時,必須考慮兩個相鄰的鍵。

+0

對不起。我已經編輯過。 – autthapone

0

試試此查詢。它也將處理年間休息(..,201212,201301,...)。在此查詢中,(M_KEY/100)*12+MOD(M_KEY,100)表達式將YEAR + MONTH格式轉換爲MONTHS。

SELECT * FROM T 
    WHERE M_KEY BETWEEN 
     (SELECT MAX(M_KEY) 
     FROM T as T1 
     WHERE M_KEY <= 201312 
       AND NOT EXISTS(SELECT * FROM T 
           WHERE 
           (M_KEY/100)*12+MOD(M_KEY,100) + 1 
           = (T1.M_KEY /100)*12+MOD(T1.M_KEY,100) 
          ) 
     ) 
     AND 201312