Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mendapatkan hitungan harian untuk acara yang tidak terjadi setiap hari

Anda sedang mencari cara untuk mendapatkan semua hari yang terdaftar, bahkan hari-hari yang tidak terwakili dalam customer Anda meja. Ini adalah rasa sakit yang terkenal di leher dalam SQL. Itu karena dalam bentuknya yang murni SQL tidak memiliki konsep urutan yang bersebelahan dari apa pun ... nomor kardinal, hari, apa pun.

Jadi, Anda perlu memperkenalkan tabel yang berisi sumber nomor kardinal yang berdekatan, atau tanggal, atau sesuatu, lalu LEFT JOIN data Anda yang sudah ada ke tabel itu.

Ada beberapa cara untuk melakukannya. Salah satunya adalah membuat sendiri calendar tabel dengan baris untuk setiap hari dalam dekade atau abad ini atau apa pun, lalu gabungkan dengannya. (Tabel itu tidak akan terlalu besar dibandingkan dengan kemampuan database modern.

Katakanlah Anda memiliki tabel itu, dan memiliki kolom bernama date . Maka Anda akan melakukan ini.

 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

Perhatikan beberapa hal. Pertama, LEFT JOIN dari tabel kalender ke kumpulan data Anda. Jika Anda menggunakan JOIN biasa data yang hilang dalam kumpulan data Anda akan menyembunyikan baris dari kalender.

Kedua, ISNULL di SELECT tingkat atas untuk mengubah nilai yang hilang, nol, dari kumpulan data Anda menjadi nilai nol.

Sekarang, Anda bertanya, di mana saya bisa mendapatkan meja kalender itu? Saya dengan hormat menyarankan Anda untuk mencari tahu, dan mengajukan pertanyaan lain jika Anda tidak dapat memahaminya.

Saya menulis sedikit esai tentang ini, yang dapat Anda temukan di sini.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. Merantai orX di pembuat kueri Doctrine2

  2. objek django+mysql='DatabaseWrapper' tidak memiliki atribut 'Database' error

  3. Gunakan Kunci Utama Gabungan sebagai Kunci Asing

  4. Pernyataan siap multi_query PHP MySQLi

  5. File PHP tidak dapat memasukkan beberapa bagian kode