[英]Assign number of quarter over years on SQL condition
我正在研究季度計數器,它將按季度識別數據差距。
這是我的數據:
Year Quarter Department 2017 1 A 2017 2 A 2017 3 A 2017 4 A 2018 1 A 2018 2 A
我正在嘗試分配從current_date
值中引用的季度數。 雖然Department
從表中退出,但在這種情況下,季度計數保持不變。
Year Quarter Department Quarter_count 2017 1 A 12 2017 2 A 11 2017 3 A 10 2017 4 A 9 2018 1 A 8 2018 2 A 7 2018 3 A 6 THIS RECORD DOESN'T EXIST 2018 4 A 5 THIS RECORD DOESN'T EXIST 2019 1 A 4 2019 2 A 3 2019 3 A 2 2019 4 A 1
我的起始代碼是:
SELECT Department, Year, Quarter, ROW_NUMBER() OVER (ORDER BY Year, Quarter ASC) FROM TABLE_A ORDER BY Depratment, Year, Quarter ASC
所以這是相當簡單的數學,每年有四個季度,所以年差乘以四,減去開始年份的季度並加上當前日期的季度,再加上一個,因為我們不是從零開始的。
因此以擴展形式:
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
你似乎想要:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.