SQL 使用ADD_MONTHS或ADDDATE实现RFM参数—R(Recency)

SQL 使用ADD_MONTHS实现RFM参数—R(Recency)

前言:

博主目前从事的是BA数据分析师、在实际工作中需要问其他部门的同事提供SQL需求,在最近的工作中大量用到SQL搭建RFM模型的案例,其中分别涉及到参数R,F和M的参数实现。因此,以我实际工作遇到的问题进行总结。

参数R的概念:

R值:最近一次消费(Recency)
消费者最近(最后)一次消费时间距离现在或指定时间的时间间隔。理论上,R值越小,所对应的客户价值就越高,即对店铺的回购几次最有可能产生回应。在CRM系统RFM模型中首先需要关注的就是R值。

使用SQL实现R值

案例如下:
2022年5月1日,某电商平台进行了一次促销活动,需要查看不同历史时间段购买的人数情况,即不同Recency的人数分布。R值如下:
1、R3
2、R4-R6
3、R7-R12
4、R13-R24
5、R25+

1、创建表格(以临时表格为例)

创建顾客及其下单日期
在这里插入图片描述

2、查看原始表格

在这里插入图片描述
顾客每次下单都会生成对应的下单时间。

3、查看每个顾客最近(最后)一次购买日期

在这里插入图片描述
注:最近下单日期,也为顾客最后的下单日期。因此取日期的最大值即可。

DROP TABLE IF EXISTS 临时表;
CREATE TEMPORARY TABLE 临时表 AS ... ...

上面创建临时表是为了下一步查询语句的方便,实际工作中会经常遇到。并推荐大家经常使用。

4、基于每个顾客的last_date添加Recency字段

在这里插入图片描述
注:在mysql中是不存在ADD_MONTHS函数的,因此在mysql的对应的编辑器中可使用ADDDATE进行代替。以下两种方法实现我们的目标R:
1、ADDDATE

ADDDATE('2022-05-01', INTERVAL -3 MONTH)  
 -- 指定日期月份减3,结果为2022-02-01

2、ADD_MONTHS

ADD_MONTHS('2022-05-01', -3)
 -- 指定日期月份减3,结果为2022-02-01

两个函数的具体使用方法,大家可以参考这位博主的文章
https://blog.csdn.net/weixin_35740875/article/details/115846912

5、查看每个R对应的人数

在这里插入图片描述
完整代码如下:

SELECT * FROM r;

DROP TABLE IF EXISTS temp_LD;
CREATE TEMPORARY TABLE temp_LD AS
SELECT cus,max(date) AS last_date from r
GROUP BY cus;

SELECT * FROM temp_LD;

-- RECENCY
DROP TABLE IF EXISTS temp_RF;
CREATE TEMPORARY TABLE temp_RF AS
SELECT *,CASE 
WHEN last_date >= ADDDATE('2022-05-01', INTERVAL -3 MONTH)  AND 
last_date < '2022-05-01' THEN 'R03'
WHEN last_date >= ADDDATE('2022-05-01', INTERVAL -6 MONTH)  AND 
last_date < ADDDATE('2022-05-01', INTERVAL -3 MONTH)  THEN 'R04-06'
WHEN last_date >= ADDDATE('2022-05-01', INTERVAL -12 MONTH) AND 
last_date < ADDDATE('2022-05-01', INTERVAL -6 MONTH)  THEN 'R07-12'
WHEN last_date >= ADDDATE('2022-05-01', INTERVAL -24 MONTH) AND 
last_date < ADDDATE('2022-05-01', INTERVAL -12 MONTH) THEN 'R13-24'
WHEN last_date < ADDDATE('2022-05-01', INTERVAL -24 MONTH) THEN 'R25+'
END AS Recency
FROM temp_LD;

SELECT * from temp_RF;

SELECT Recency,COUNT(DISTINCT cus) AS cus_num 
FROM temp_RF
GROUP BY Recency;
SQL中,ADDDATE函数用于对日期类型进行操作,可以实现日期的增加或减少,而不改变原始数据。引用中给出了ADDDATE函数的使用示例:DATE_ADD(date, INTERVAL expr unit)。其中,date表示要操作的日期,expr表示要增加或减少的数量,unit表示要增加或减少的单位。例如,ADDDATE('2022-05-01', INTERVAL -3 MONTH)表示将指定日期减去3个月,结果为2022-02-01。另外,在MySQL中,ADD_MONTHS函数并不存在,可以使用ADDDATE函数进行替代。所以,通过ADDDATE函数可以实现对日期进行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SQL 多条件查询几种实现方法详细介绍](https://download.csdn.net/download/weixin_38701683/13704425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mysql使用date_add()函数](https://blog.csdn.net/yojofly/article/details/100083016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SQL 使用ADD_MONTHSADDDATE实现RFM参数—R(Recency)](https://blog.csdn.net/coffeetogether/article/details/124571035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值