如何从Oracle表中获取最后两个季度的数据

时间:2018-03-11 03:02:52

标签: database oracle oracle11g oracle12c

我有一个名为" Quarter_revenue"的表。表结构的样本如下

Year    Quarter Revenue
2017    Q1  10000
2017    Q1  20000
2017    Q2  30000
2017    Q2  40000
2017    Q3  50000
2017    Q3  60000
2017    Q4  70000
2017    Q4  80000
2016    Q1  90000
2016    Q1  100000
2016    Q2  110000
2016    Q2  120000
2016    Q3  130000
2016    Q3  140000
2016    Q4  150000
2016    Q4  160000
2015    Q1  170000
2015    Q1  180000
2015    Q2  190000
2015    Q2  200000
2015    Q3  210000
2015    Q3  220000
2015    Q4  230000
2015    Q4  240000

此表中没有日期列。我想从这个表中获取最后两个季度的数据。该表将在每个季度更新。请帮帮我...

2 个答案:

答案 0 :(得分:1)

如果您想要整个表中的最后两个季度,那么密集排名应该有效:

SELECT Year, Quarter, Revenue
FROM
(
    SELECT Year, Quarter, Revenue,
        DENSE_RANK() OVER (ORDER BY Year DESC, Quarter DESC) dr
    FROM yourTable
) t
WHERE dr IN (1, 2)
ORDER BY
    Year, Quarter

enter image description here

Demo

该演示在SQL Server中,但它也应该在Oracle中完全有效。设置Oracle演示也很痛苦。

答案 1 :(得分:0)

假设“过去两个季度”表示当前日历季度和前一个季度,您可以尝试

select <whatever>
from   your_table
where  yr || qtr = to_char(sysdate, 'yyyy"Q"q')
   or  yr || qtr = to_char(add_months(sysdate, -3), 'yyyy"Q"q')

我认为你的专栏并没有真正被称为YEAR和QUARTER - 我使用了YR和QTR来说明这个例子。

如果您的意思是在2018年3月,您必须选择2017年第3季度和第4季度,您可以将WHERE条款修改为add_months(sysdate, -3)add_months(sysdate, -6)