Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :nombre d'enregistrements avec des mois consécutifs

Vous pouvez le faire dans MySQL en utilisant des variables (ou des sous-requêtes corrélées très compliquées). Dans d'autres bases de données, vous utiliseriez des fonctions de fenêtre/analytiques.

La logique est :

  1. Obtenez une ligne par mois et par personne avec un achat.
  2. Utilisez des variables pour attribuer à chaque groupe de mois consécutifs une valeur de "regroupement".
  3. Agrégation par la personne et la valeur "regroupement".

Voici une requête qui a été testée sur votre 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;