计算每个会计年度的不重复计数,并在查询结果中显示所有日期

问题描述

DB-Fiddle

CREATE TABLE customers (
    id int auto_increment primary key,order_date DATE,customerID VARCHAR(255)
);

INSERT INTO customers
(order_date,customerID
)
VALUES 
("2020-01-15","Customer_01"),("2020-02-15",("2020-03-18",("2020-04-22",("2021-01-19",("2020-01-25","Customer_02"),("2020-02-26",("2020-11-23",("2021-01-17",("2021-02-20","Customer_02");

预期结果:

order_date   |      quantity
             |    (fiscal year)
-----------------------------------------------------------------
2020-01-15   |           1         --> Customer_01 appears the first time between 2019-03 and 2020-02)
2020-01-25   |           1         --> Customer_02 appears the first time between 2019-03 and 2020-02)
2020-02-15   |           0
2020-02-26   |           0
2020-03-18   |           1         --> Customer_01 appears the first time between 2020-03 and 2021-02
2020-04-22   |           0
2020-11-23   |           1         --> Customer_02 appears the first time between 2020-03 and 2021-02
2021-01-17   |           0
2021-01-19   |           0
2021-02-20   |           0

在上述结果中,我想列出每个财政年度的所有order dates count 个数字customers 强>。
fiscal year在日历年后的两个月开始,因此从marchFebruary
(例如,从2020-032021-02)。

例如,Customer_01在财政年度2020-03-182020-03内首次出现在2021-02上。
因此,此order_date被分配了1
如果客户在会计年度内再次出现,下一个order_date将被分配0


到目前为止,我已使用以下查询

SELECT
order_date,SUM(rn = 1) AS quantity
FROM 
  (SELECT 
  order_date,row_number() over(PARTITION BY YEAR(order_date),customerID ORDER BY order_date) rn
  FROM customers
  ) t
GROUP BY 1;

它非常适合日历年。
但是,我不知道如何应用从会计年度开始的两个月轮班。
你有什么主意吗?

解决方法

我已更新您的查询,如下所示:

SELECT
order_date,SUM(rn = 1) AS quantity
FROM 

  (SELECT 
  order_date,row_number() over(PARTITION BY YEAR(order_date - INTERVAL 2 MONTH),customerID ORDER BY order_date) rn
  FROM customers
  ) t
  
GROUP BY 1;