下图为一张订单表(order1),现希望查找出至少连续3天下单的用户。

mysql查询近7天 mysql查询三天内记录_mysql

第一步:将订单表按UserId分组根据日期Date排序。

mysql查询近7天 mysql查询三天内记录_自定义_02

注:窗口函数row_number()mysql8.0及以上版本可用。

mysql查询近7天 mysql查询三天内记录_mysql_03

第二步:用日期Date减去对应的排序号Num,若日期是连续的,则相减的结果Datedif相等。

mysql查询近7天 mysql查询三天内记录_自定义_04

mysql查询近7天 mysql查询三天内记录_mysql_05

第三步:按UserId,Datedif分组计数,得到各用户的连续下单天数。

mysql查询近7天 mysql查询三天内记录_窗口函数_06

mysql查询近7天 mysql查询三天内记录_自定义_07

第四步:筛选连续下单天数≥3的用户

mysql查询近7天 mysql查询三天内记录_窗口函数_08

第三步和第四步也可合并为一步,即:

mysql查询近7天 mysql查询三天内记录_mysql_09

得到至少连续3天下单的用户如下:

mysql查询近7天 mysql查询三天内记录_窗口函数_10

第一步也可使用自定义变量的方式实现:

mysql查询近7天 mysql查询三天内记录_自定义_11

因此最终代码也可表示为:

mysql查询近7天 mysql查询三天内记录_mysql_12