您可以在MySQL中使用变量(或非常复杂的相关子查询)来执行此操作。在其他数据库中,您将使用窗口/分析功能。
逻辑是:
- 每月购买一排,每人一次。
- 使用变量为连续几个月的每个组分配一个“分组”值。
- 按人和“分组”值进行汇总。
这是一个已经在您的SQL Fiddle上测试过的查询:
select person, count(*) as numMonthsfrom (select person, ym, @ym, @person, if(@person = person and @ym = ym - 1, @grp, @grp := @grp + 1) as grp, @person := person, @ym := ym from (select distinct person, year(purdate)*12+month(purdate) as ym from records r) r cross join(select @person := '', @ym := 0, @grp := 0) const order by 1, 2 ) pymgroup by person, grp;



