需求:SQL处理获取用户最近连续使用月数(最近月2023-04)
思路
利用开窗函数将所有基础数据根据用户(user_id)分组(作为开窗列),每个组内根据月份(date_month)做降序排序,获得当月在组内的序号
row_number() over (partition by user_id order by date_month desc) as nums
利用日期差函数计算当月距最近月月月份差,获得当月距基准月月份差
datediff(to_date('2023-04','yyyy-mm'),to_date('2023-03','yyyy-mm'), 'mm')
当当月距最近月月份差+1 等于 当月在组内的序号
满足连续使用条件,然后根据用户分组取最大月份数。
基础数据
user_id | date_month |
---|---|
001 | 2023-04 |
001 | 2023-03 |
001 | 2023-02 |
002 | 2023-04 |
002 | 2023-03 |
001 | 2023-04 |
结果数据
用户ID | 连续使用月数 |
---|---|
001 | 3 |
002 | 2 |
003 | 1 |