sql >> Database teknologi >  >> RDS >> Mysql

MySQL:Antal poster med på hinanden følgende måneder

Du kan gøre dette i MySQL ved hjælp af variabler (eller meget komplicerede korrelerede underforespørgsler). I andre databaser ville du bruge vindues-/analytiske funktioner.

Logikken er:

  1. Få én række pr. måned og person med et køb.
  2. Brug variabler til at tildele hver gruppe af på hinanden følgende måneder en "grupperings"-værdi.
  3. Samles efter personen og værdien "gruppering".

Her er en forespørgsel, der er blevet testet 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. MySQL - Vælg den seneste dato ud af et sæt af flere mulige tidsstempler?

  2. Påvirker rækkefølgen af ​​felter i en WHERE-sætning ydeevne i MySQL?

  3. Oprettelse af en tabel ud fra en forespørgsel ved hjælp af et andet tablespace (Oracle SQL)

  4. PostgreSQL Connection Pooling med PgBouncer