sql >> Base de Datos >  >> RDS >> Mysql

MySQL:recuento de registros con meses consecutivos

Puede hacer esto en MySQL usando variables (o subconsultas correlacionadas muy complicadas). En otras bases de datos, usaría funciones de ventana/analíticas.

La lógica es:

  1. Obtenga una fila por mes y persona con una compra.
  2. Utilice variables para asignar a cada grupo de meses consecutivos un valor de "agrupación".
  3. Agregar por persona y el valor de "agrupación".

Aquí hay una consulta que ha sido probada en su SQL Fiddle:

select person, count(*) as numMonths
from (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
     ) pym
group by person, grp;