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

Pengelompokan berdasarkan tanggal, kembalikan baris meskipun tidak ada catatan yang ditemukan

MySQL tidak memiliki fungsi rekursif, jadi Anda tinggal menggunakan trik tabel ANGKA -

  1. Buat tabel yang hanya menampung angka yang bertambah - mudah dilakukan menggunakan peningkatan_otomatis:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. Isi tabel menggunakan:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...untuk nilai sebanyak yang Anda butuhkan.

  3. Gunakan DATE_ADD untuk membuat daftar tanggal, menambah hari berdasarkan nilai NUMBERS.id. Ganti "2010-01-01" dan "2010-03-01" dengan tanggal mulai dan akhir masing-masing (tetapi gunakan format yang sama, YYYY-MM-DD) -

    SELECT x.*
      FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY)
              FROM numbers n
             WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
    
  4. KIRI GABUNG ke tabel data Anda berdasarkan porsi tanggal-waktu:

       SELECT DATE(x.dt) AS dt,
              COALESCE(SUM(e.value), 0) AS sum_value
         FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) AS dt
                 FROM numbers n
                WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
    LEFT JOIN ENTRY e ON DATE(e.datetime) = x.dt
                     AND e.entryid = 85
     GROUP BY DATE(x.dt) 
    

Mengapa Angka, bukan Tanggal?

Sederhana - tanggal dapat dibuat berdasarkan nomor, seperti pada contoh yang saya berikan. Ini juga berarti menggunakan satu tabel, vs katakan satu per tipe data.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Joomla! 3 instalasi macet saat membuat tabel database

  2. Bisakah saya menerapkan batasan keunikan secara kondisional?

  3. Kolom tidak dikenal di 'memiliki klausa'

  4. Pencarian Teks Lengkap dengan InnoDB

  5. Bagaimana cara terbaik mendesain REST API dengan banyak filter?