Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskiwanie dziennej liczby zdarzeń, które nie zdarzają się codziennie

Szukasz sposobu, aby wyświetlić wszystkie dni na liście, nawet te, które nie są reprezentowane przez Twojego customer stół. To jest notoryczny ból szyi w SQL. To dlatego, że w czystej postaci SQL nie ma koncepcji ciągłego ciągu czegokolwiek... liczb kardynalnych, dni, czegokolwiek.

Musisz więc wprowadzić tabelę zawierającą źródło ciągłych liczb kardynalnych, dat lub czegoś podobnego, a następnie DOŁĄCZYĆ istniejące dane w lewo do tej tabeli.

Jest na to kilka sposobów. Jednym z nich jest stworzenie sobie calendar stół z rzędem na każdy dzień w obecnej dekadzie, stuleciu lub cokolwiek innego, a następnie dołącz do niego. (Ta tabela nie będzie zbyt duża w porównaniu z możliwościami nowoczesnej bazy danych.

Załóżmy, że masz tę tabelę i zawiera kolumnę o nazwie date . Wtedy byś to zrobił.

 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

Zwróć uwagę na kilka rzeczy. Najpierw LEFT JOIN z tabeli kalendarza do zestawu danych. Jeśli używasz zwykłego JOIN brakujące dane w zestawie danych będą pomijać wiersze z kalendarza.

Po drugie, ISNULL w najwyższym poziomie SELECT aby zamienić brakujące, puste wartości z zestawu danych na wartości zerowe.

Teraz pytasz, gdzie mogę dostać tę tabelę kalendarza? Z szacunkiem sugeruję, abyś to sprawdził i zadał kolejne pytanie, jeśli nie możesz tego rozgryźć.

Napisałem na ten temat mały esej, który można znaleźć tutaj.http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaimplementuj powiadomienia o zdarzeniach MySQL z powrotem do aplikacji Delphi

  2. Prześlij obraz bezpośrednio za pomocą wiersza poleceń mySQL

  3. Replikacja MySQL:błędne transakcje w replikacji opartej na GTID

  4. Wiele instrukcji INSERT mysql w jednym zapytaniu php

  5. Dlaczego szacowana liczba wierszy jest bardzo różna w wynikach phpmyadmina?