自定义 SQL 用于从上个月开始的季度计数

Custom SQL for quarter count starting from previous month

我需要创建一个自定义季度计算器,无论我们所在的月份、年份如何,它总是从上个月开始计算,然后倒数得到季度。前一年的 wuarters 将被编号为 5、6 等

所以我们的目标是将季度分组提前一个月。

假设我们在 12 月 11 日 运行 查询,结果应该是:

YEAR  MNTH  QTR   QTR_ALT
2017    1   1      12
2017    2   1      12
2017    3   1      11
2017    4   2      11
2017    5   2      11
2017    6   2      10
2017    7   3      10
2017    8   3      10
2017    9   3      9
2017    10  4      9
2017    11  4      9
2017    12  4      8
2018    1   1      8
2018    2   1      8
2018    3   1      7
2018    4   2      7
2018    5   2      7
2018    6   2      6
2018    7   3      6 
2018    8   3      6
2018    9   3      5
2018    10  4      5
2018    11  4      5
2018    12  4      1
2019    1   1      1
2019    2   1      1
2019    3   1      2
2019    4   2      2
2019    5   2      2
2019    6   2      3
2019    7   3      3
2019    8   3      3
2019    9   3      4
2019    10  4      4
2019    11  4      4 

2019    12  4      THIS IS SKIPPED 

起点是消除 current_date 所以数据在上个月的最后一天结束

  SELECT DISTINCT 
     YEAR, 
     MNTH, 
     QTR 
  FROM TABLE
    WHERE DATA BETWEEN 
               (SELECT DATE_TRUNC(YEAR,ADD_MONTHS(CURRENT_DATE, -24))) AND 
               (SELECT DATE_TRUNC(MONTH,CURRENT_DATE)-1) 

  ORDER BY YEAR, MNTH, QTR

以下为您提供了所需的所有日期,并带有额外的列。

select to_char(add_months(a.dt, -b.y), 'YYYY') as year,
to_char(add_months(a.dt, -b.y), 'MM') as month,
ceil(to_number(to_char(add_months(a.dt, -b.y), 'MM')) / 3) as qtr,
ceil(b.y/3) as alt_qtr
from
(select trunc(sysdate, 'MONTH') as dt from dual) a,
(select rownum as y from dual connect by level <= 24) b;