分配SQL条件下的季度数

问题描述 投票:1回答:2

我正在四分之一计数器上,它将按季度识别数据缺口。

这是我的数据:

年季部门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
sql count partition snowflake-datawarehouse row-number
2个回答
0
投票

您似乎想要:

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

0
投票

所以这是一个非常简单的数学,每年有四个季度,因此,年份的差值乘以四,减去开始年份的季度,再加上当前日期的季度,再加上一个,因为我们不是从零开始的。 >

因此以扩展形式:

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
© www.soinside.com 2019 - 2024. All rights reserved.