Mysql
 sql >> база данни >  >> RDS >> Mysql

Получаване на ежедневни отчети за събития, които не се случват всеки ден

Търсите начин да получите всички изброени дни, дори онези дни, които не са представени във вашия customer маса. Това е известна болка във врата в SQL. Това е така, защото в чистата си форма на SQL липсва концепцията за непрекъсната последователност от каквото и да било... кардинални числа, дни, каквото и да е.

Така че, трябва да представите таблица, съдържаща източник на последователни кардинални числа, дати или нещо подобно, и след това НАЛЯВО ПРИСЪЕДИНЕТЕ съществуващите си данни към тази таблица.

Има няколко начина да направите това. Единият е да си създадете calendar таблица с ред за всеки ден от настоящото десетилетие или век или каквото и да е, след което се присъединете към нея. (Тази таблица няма да е много голяма в сравнение с възможностите на модерна база данни.

Да приемем, че имате тази таблица и тя има колона с име date . Тогава бихте направили това.

 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

Забележете няколко неща. Първо, LEFT JOIN от таблицата на календара към вашия набор от данни. Ако използвате обикновен JOIN липсващите данни във вашия набор от данни ще потиснат редовете от календара.

Второ, ISNULL в SELECT от най-високо ниво за да превърнете липсващите нулеви стойности от вашия набор от данни в нулеви стойности.

Сега, питате, къде мога да намеря тази календарна таблица? С уважение ви предлагам да разгледате това и да зададете друг въпрос, ако не можете да го разберете.

Написах малко есе за това, което можете да намерите тук.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. Приставката за удостоверяване „caching_sha2_password“ не се поддържа

  2. SQL ПОРЪЧАЙ ПО множество колони

  3. mysql брой записи в курсора без повторение?

  4. PHP подготвя оператори и транзакции в цикъл

  5. Как използвате клаузата MySql IN