sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Antal poster med på varandra följande månader

Du kan göra detta i MySQL med hjälp av variabler (eller mycket komplicerade korrelerade underfrågor). I andra databaser skulle du använda fönster/analytiska funktioner.

Logiken är:

  1. Få en rad per månad och person med ett köp.
  2. Använd variabler för att tilldela varje grupp av på varandra följande månader ett "grupperingsvärde".
  3. Aggregera efter personen och värdet "gruppering".

Här är en fråga som har testats på din 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. SQLite Listview onclick filter db för att öppna resulterar i ny aktivitet

  2. Vad är makron och hur använder jag dem?

  3. rumsfel:Kolumnerna som returneras av frågan har inte fälten fältnamn

  4. SqlParameter tillåter inte Tabellnamn - andra alternativ utan sql-injektionsattack?