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

Získávání denních počtů událostí, které se nestávají každý den

Hledáte způsob, jak získat všechny dny v seznamu, dokonce i ty dny, které nejsou zastoupeny u vašeho customer stůl. To je notoricky známá bolest v krku v SQL. Je to proto, že ve své čisté formě SQL postrádá koncept souvislé posloupnosti čehokoli ... kardinálních čísel, dnů, čehokoli.

Takže musíte zavést tabulku obsahující zdroj souvislých hlavních čísel nebo dat nebo tak něco, a pak LEVÝM PŘIPOJIT svá existující data k této tabulce.

Existuje několik způsobů, jak toho dosáhnout. Jedním z nich je vytvořit si calendar tabulku s řádkem pro každý den v tomto desetiletí nebo století nebo cokoliv jiného, ​​pak se k ní připojte. (Tato tabulka nebude příliš velká ve srovnání se schopnostmi moderní databáze.

Řekněme, že máte tuto tabulku a má sloupec s názvem date . Pak byste to udělali.

 SELECT calendar.date AS created,
        ISNULL(a.customer_count, 0) AS customer_count
   FROM calendar
   LEFT JOIN ( 
            SELECT COUNT(*) AS customer_count,
                   DATE(created) AS created
              FROM customer
             GROUP BY DATE(created)
        ) a ON calendar.date = a.created
   WHERE calendar.date BETWEEN start AND finish 
   ORDER BY calendar.date

Všimněte si několika věcí. Nejprve LEFT JOIN z tabulky kalendáře do vaší datové sady. Pokud použijete obyčejný JOIN chybějící data ve vaší datové sadě potlačí řádky z kalendáře.

Za druhé, ISNULL v nejvyšší úrovni SELECT pro přeměnu chybějících, nulových hodnot z vaší datové sady na nulové hodnoty.

Nyní se ptáte, kde mohu získat tu tabulku kalendáře? Uctivě vám navrhuji, abyste si to prohledali a pokud na to nemůžete přijít, položte další otázku.

Napsal jsem o tom malou esej, kterou najdete zde.http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/



  1. Oracle Wait Events, které by měl znát každý

  2. Mysql:nemožné tam, kde jste si všimli po přečtení tabulek const

  3. Jak odstranit řadu záznamů najednou na MySQL?

  4. Prozkoumání možností čekání na zámek s nízkou prioritou v SQL Server 2014 CTP1