簡體   English   中英

根據 SQL 條件分配季度數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM