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

At få daglige tæller for begivenheder, der ikke sker hver dag

Du leder efter en måde at få alle dage på listen, selv de dage, der ikke er repræsenteret i din customer bord. Dette er en berygtet smerte i nakken i SQL. Det er fordi SQL i sin rene form mangler konceptet om en sammenhængende sekvens af noget som helst ... kardinaltal, dage, hvad som helst.

Så du er nødt til at introducere en tabel, der indeholder en kilde til sammenhængende kardinaltal, eller datoer eller noget, og derefter VENSTRE JOIN dine eksisterende data til den tabel.

Der er et par måder at gøre det på. Den ene er at oprette dig selv en calendar bord med en række for hver dag i det nuværende årti eller århundrede eller hvad som helst, så tilslut dig det. (Den tabel vil ikke være særlig stor sammenlignet med en moderne databases muligheder.

Lad os sige, at du har den tabel, og den har en kolonne med navnet date . Så ville du gøre dette.

 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

Læg mærke til et par ting. Først LEFT JOIN fra kalendertabellen til dit datasæt. Hvis du bruger en almindelig JOIN de manglende data i dit datasæt vil undertrykke rækkerne fra kalenderen.

For det andet, ISNULL i topniveauet SELECT for at omdanne de manglende, null-værdier fra dit datasæt til nulværdier.

Nu spørger du, hvor kan jeg få det kalenderbord? Jeg foreslår med respekt, at du slår det op og stiller et andet spørgsmål, hvis du ikke kan finde ud af det.

Jeg skrev et lille essay om dette, som du kan finde her.http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/



  1. Sådan listes alle databaser ved hjælp af PostgreSQL

  2. Mysql fuldtekst søgerelevans på tværs af flere tabeller

  3. MAMP PRO går ned; MySQL starter ikke ved genstart

  4. 1030 Fik fejl 28 fra lagermotoren