sql >> Database >  >> RDS >> Mysql

MySQL:Aantal records met opeenvolgende maanden

U kunt dit doen in MySQL met behulp van variabelen (of zeer gecompliceerde gecorreleerde subquery's). In andere databases zou u venster-/analysefuncties gebruiken.

De logica is:

  1. Krijg één rij per maand en per persoon bij een aankoop.
  2. Gebruik variabelen om elke groep van opeenvolgende maanden een "groeps"-waarde toe te wijzen.
  3. Aggregeren op persoon en de waarde voor "groeperen".

Hier is een query die is getest op uw 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;


  1. SQL-ontwikkelaar 4

  2. Toegang geweigerd voor gebruiker 'root'@'localhost' tijdens een poging om privileges te verlenen. Hoe verleen ik privileges?

  3. Tel hoeveel rijen ingevoegd vanuit de laatste SQL-query

  4. Oracle join-syntaxisvoorbeelden