我正在四分之一计数器上,它将按季度识别数据缺口。
这是我的数据:
年季部门2017 1 A2017 2 A2017 3 A2017 4 A2018年1 A2018 2 A
我正在尝试分配要从current_date
值引用的四分之一数。当Department
从表中删除时,该情况下四分之一计数保持不变。
年季度部门Quarter_count2017 1 A 122017 2 A 112017年3月10日2017年4 A 92018年1 A 82018年2 A 72018 3 A 6不存在此记录2018 4 A 5不存在此记录2019 1 A 42019 2 A 32019 3 A 22019 4 A 1
我的起始代码是:
SELECT部门,年份,季度,ROW_NUMBER()以上(按年份,按季度ASC排序)来自TABLE_A按部门订购,年份,季度ASC
您似乎想要:
select d.department, y.yr, q.qtr,
row_number() over (partition by d.department order by y.yr desc, q.qtr desc) as seqnum
from (select distinct department from t) d cross join
(values (1), (2), (3), (4)) as q(qtr) cross join
(values (2017), (2018), (2019)) as y(yr) left join
t
on t.department = d.department and
t.year = y.yr and
t.qtr = y.qtr
所以这是一个非常简单的数学,每年有四个季度,因此,年份的差值乘以四,减去开始年份的季度,再加上当前日期的季度,再加上一个,因为我们不是从零开始的。 >
因此以扩展形式:
with table_a as ( SELECT column1 as year, column2 as Quarter, column3 as Department from values (2017,1,'A'),(2017,2,'A'),(2017,3,'A'),(2017,4,'A') ,(2018,1,'A'),(2018,2,'A') --,(2018,3,'A'),(2018,4,'A') ,(2019,1,'A'),(2019,2,'A'),(2019,3,'A'),(2019,4,'A') ) SELECT department, year, quarter ,YEAR(current_date) as cdy ,QUARTER(current_date) as cdq ,(cdy-year)*4 as year_diff_in_q ,year_diff_in_q - quarter + cdq + 1 as Quarter_count FROM table_a ORDER BY department, year, quarter ASC;
给予:
DEPARTMENT YEAR QUARTER CDY CDQ YEAR_DIFF_IN_Q QUARTER_COUNT A 2017 1 2019 4 8 12 A 2017 2 2019 4 8 11 A 2017 3 2019 4 8 10 A 2017 4 2019 4 8 9 A 2018 1 2019 4 4 8 A 2018 2 2019 4 4 7 A 2019 1 2019 4 0 4 A 2019 2 2019 4 0 3 A 2019 3 2019 4 0 2 A 2019 4 2019 4 0 1
因此较小:
with table_a as ( SELECT column1 as year, column2 as Quarter, column3 as Department from values (2017,1,'A'),(2017,2,'A'),(2017,3,'A'),(2017,4,'A') ,(2018,1,'A'),(2018,2,'A') --,(2018,3,'A'),(2018,4,'A') ,(2019,1,'A'),(2019,2,'A'),(2019,3,'A'),(2019,4,'A') ) SELECT department, year, quarter ,((YEAR(current_date)-year)*4) - quarter + QUARTER(current_date) + 1 as Quarter_count FROM table_a ORDER BY department, year, quarter ASC;
给予:
DEPARTMENT YEAR QUARTER QUARTER_COUNT
A 2017 1 12
A 2017 2 11
A 2017 3 10
A 2017 4 9
A 2018 1 8
A 2018 2 7
A 2019 1 4
A 2019 2 3
A 2019 3 2
A 2019 4 1