这个示例数据。
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。
答案 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