sql >> Databáze >  >> RDS >> Mysql

MySQL:Počet záznamů s po sobě jdoucími měsíci

V MySQL to můžete udělat pomocí proměnných (nebo velmi komplikovaných korelovaných poddotazů). V jiných databázích byste použili okno/analytické funkce.

Logika je:

  1. Získejte za nákup jeden řádek za měsíc a osobu.
  2. Pomocí proměnných přiřaďte každé skupině po sobě jdoucích měsíců hodnotu „seskupení“.
  3. Agregované podle osoby a hodnoty „seskupení“.

Zde je dotaz, který byl testován na vašem 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. Použití OASIS-SVN a git pro řízení zdrojového kódu Access

  2. Přístup k více dotazům MySQL pomocí Node.js

  3. Jak získat pouze číslice z řetězce v mysql?

  4. MariaDB FIELD() vs FIND_IN_SET():Jaký je rozdíl?