我的任务是拉动最近四个季度的数据。如果我正在处理日期,这将很容易,但是当我有一个看起来像这样的宿舍表时,我不知道该怎么做:
| quarter | year |
+---------+------+
| 1 | 2016 |
| 2 | 2016 |
| 3 | 2016 |
...
我知道我可以通过这样的方式获得当前季度:
SELECT *
FROM quarters
WHERE quarter = (EXTRACT(QUARTER FROM CURRENT_DATE))
AND year = (EXTRACT(YEAR FROM CURRENT_DATE));
但是,我不确定获得最近四个季度的最佳方法。我想从去年开始这个季度,并从那时起选择所有内容,但我不知道如何用这样的元组做到这一点。我的预期结果将是:
| quarter | year |
+---------+------+
| 1 | 2017 |
| 2 | 2017 |
| 3 | 2017 |
| 4 | 2017 |
请记住,他们永远不会在同一年 - 在2018年第一季,这将会改变。
我已经建立了一个可以用来修补它的SQLFiddle - http://sqlfiddle.com/#!17/0561a/1
答案 0 :(得分:3)
这是一种方法:
select quarter, year
from quarters
order by year desc, quarter desc
fetch first 4 rows only;
这假设quarters
表中只有包含数据的四分之一(如您的样本数据所示)。如果表格中还有未来的季度,那么您需要将这些值与当前日期进行比较:
select quarter, year
from quarters
where year < extract(year from current_date) or
(year = extract(year from current_date) and
quarter <= extract(quarter from current_date)
)
order by year desc, quarter desc
fetch first 4 rows only;
答案 1 :(得分:1)
对于可能存在缺口的情况,例如2/2017失踪,然后一个人只想返回四分之三而不是四分之一,可以将年份和季度变为连续数字,将年份乘以4并添加四分之三。
select *
from quarters
where year * 4 + quarter
between extract(year from current_date) * 4 + extract(quarter from current_date) - 3
and extract(year from current_date) * 4 + extract(quarter from current_date)
order by year desc, quarter desc;