如何用SQL统计用户复购(or留存)数据

本文详细介绍了如何利用SQL函数如datediff和months_between统计用户复购(留存)数据,包括每天的新户交易量、新户在T+n日的复购交易量以及新户在自然月当月和下月的成交量。通过示例SQL代码,阐述了如何从全量用户交易数据表中提取关键信息。
摘要由CSDN通过智能技术生成

在工作中,如果涉及到用户交易的数据,我们可能会经常统计每天的新户(用户在当日首次完成交易)交易用户数、新户在次日、T+n日、次周、下下周、在自然月当月、在下月、在下下月等不同的时间周期内的复购数据。

用户在首次交易的日期之后的第n天,再次发生了交易行为,我们称之为用户在第n天的复购。其实,用户在第n天产生了复购行为,也就是用户在第n天之后还是留存的。复购和留存的意思是一样的。这些统计数据其实是非常常见的,所以我在这些常见的复购统计情况做个总结。在这之前,需要先了解一些常见的SQL函数。

统计复购数据涉及的SQL函数

  • datediff(date1,date2):返回日期date1和date2之间相差的天数
select datediff('2020-08-13','2020-07-31')
输出:13
  • months_between(date1,date2):返回日期date1和date2之间相差的月份数,以小数形式展示。
select months_between('2020-08-13','2020-07-20')
输出:0.77419355

但在实际中,我们一般想要的两个日期之间相差的月份数是一个整数,比如2020-07-20和2020-08-13,相差了一个月,我们希望返回的结果是1,而不是一个很精确的小数。这时可以用round函数来取整。

select   round(months_between('2020-08-13','2020-07-20'))
输出:1.0
  • min(trans_date) over(partition by uid):以用户的UID进行分区,计算出该用户最小的交易日期,也就是用户首次交易的日期
  • max(trans_date) over(partition by uid):以用户的UID进行分区,计算出该用户最大的交易日期,也就是用户最近一次完成交易的日期

使用SQL统计用户复购数据

假设我们现在有一张全量的用户交易数据表,记录了所有用户在历史所有时期的交易行为,用户交易一次,就产生一条记录。具体的表结构如下:

create table t_user_trans_info(
index_id    int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
trans_date  datetime NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '交易日期和时间',
uid         varchar(20) NOT NULL DEFAULT ' ' COMMENT '用户
  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值