自定义 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;
我需要创建一个自定义季度计算器,无论我们所在的月份、年份如何,它总是从上个月开始计算,然后倒数得到季度。前一年的 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;