问题描述
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
在日历年后的两个月开始,因此从march
到February
。
(例如,从2020-03
到2021-02
)。
例如,Customer_01
在财政年度2020-03-18
到2020-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;