计算日期如果与客户的第一笔订单在同一个月

问题描述

DB Fiddle

/* table returned */
CREATE TABLE returned (
    id int auto_increment primary key,customerID VARCHAR(255),returned_date DATE
);

INSERT INTO returned
(customerID,returned_date
)
VALUES 
("Customer_01","2020-03-20"),("Customer_01","2020-03-22"),"2020-04-19"),("Customer_02","2020-08-09"),("Customer_03","2020-07-31"),"2020-08-25"),("Customer_04","2020-09-16"),"2021-09-25");


/* table customers */
CREATE TABLE customers (
    id int auto_increment primary key,first_order DATE
);

INSERT INTO customers
(customerID,first_order
)
VALUES 
("Customer_01","2020-03-15"),"2020-06-16"),"2020-07-27"),"2020-08-10");

预期结果

customerID      returned_date   first_order             COUNT
Customer_01     2020-03-20      2020-03-15                1
Customer_01     2020-03-22      2020-03-15                0
Customer_01     2020-04-19      2020-03-15                0
Customer_02     2020-08-09      2020-06-16                0
Customer_03     2020-07-31      2020-07-27                1
Customer_03     2020-08-25      2020-07-27                0
Customer_04     2020-09-16      2020-08-10                0

我的数据库由两个表returnedcustomers组成。
customers表中,您可以找到每个客户first_order的日期。
returned表中,您可以找到客户到目前为止已完成的每笔退货。

现在,我想创建一个列表,并将count的所有returned_dates与某个客户的first_order日期相距同一个月
如果在同一个月中有多个订单,则仅应将第一个匹配项计为1
其他应为0(请参见示例中的Customer_01)


this question的区别在于,没有return_datefirst_order日期完全匹配。
因此,此查询不起作用:

SELECT
r.customerID,r.returned_date,c.first_order,(r.returned_date = c.first_order) is_first_order
FROM returned r
INNER JOIN customers c ON c.customerID = r.customerID

您知道我如何达到预期的结果吗?

解决方法

您似乎想要:

select r.customerID,r.returned_date,c.first_order,(case when r.returned_date < c.first_order + interval 1 month and
                  row_number() over (partition by c.customerID order by returned_date) = 1
             then 1 else 0
         end) as return_flag
from returned r join
     customers c
     on c.customerID = r.customerID;

仅当这是第一笔订单并且在客户开始日期的一个月内发生时,这会将第一笔退货标记为“ 1”。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...