DB2查询 - 选择上一个相邻月份直到不存在?

时间:2014-06-17 09:47:16

标签: sql 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

假设当前MONTH是201312。

2 个答案:

答案 0 :(得分: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时你必须考虑相邻的两个键。

答案 1 :(得分: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