Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Anzahl der Datensätze mit aufeinanderfolgenden Monaten

Sie können dies in MySQL mithilfe von Variablen (oder sehr komplizierten korrelierten Unterabfragen) tun. In anderen Datenbanken würden Sie Fenster-/Analysefunktionen verwenden.

Die Logik ist:

  1. Erhalten Sie eine Zeile pro Monat und Person mit einem Kauf.
  2. Verwenden Sie Variablen, um jeder Gruppe aufeinanderfolgender Monate einen "Gruppierungs"-Wert zuzuweisen.
  3. Aggregiert nach der Person und dem "Gruppierungs"-Wert.

Hier ist eine Abfrage, die auf Ihrem SQL Fiddle getestet wurde:

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;