Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:contagem de registros com meses consecutivos


Você pode fazer isso no MySQL usando variáveis ​​(ou subconsultas correlacionadas muito complicadas). Em outros bancos de dados, você usaria funções de janela/analítica.

A lógica é:
  1. Receba uma linha por mês e por pessoa com uma compra.
  2. Use variáveis ​​para atribuir a cada grupo de meses consecutivos um valor de "agrupamento".
  3. Agregue por pessoa e valor de "agrupamento".

Aqui está uma consulta que foi testada em seu 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;