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

MySQL Hitung data selama 7 hari terakhir

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

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

    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 "01-01-01" dan "01-01-02" dengan tanggal mulai dan akhir masing-masing (tetapi gunakan format yang sama, YYYY-MM-DD HH:MM:SS). Dalam contoh ini, saya mengurangi nilai NUMBERS.id dari CURRENT_DATE untuk mendapatkan daftar nilai tanggal berurutan untuk minggu lalu -

    SELECT x.dt
      FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
              FROM numbers n
             WHERE n.id <= 7 ) x
    
  4. LEFT JOIN ke tabel data Anda berdasarkan porsi datetime.

       SELECT x.dt,
               COUNT(v.aid) AS num
         FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
                 FROM numbers n
                WHERE n.id <= 7 ) x
    LEFT JOIN VOTES v ON DATE(FROM_UNIXTIME(v.timestamp)) = DATE(x.dt)
     GROUP BY x.dt
     ORDER BY 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.

Sebelumnya:

  SELECT DATE(FROM_UNIXTIME(v.timestamp)) AS dt,
         COUNT(v.aid)
    FROM VOTES v
   WHERE DATE(FROM_UNIXTIME(v.timestamp)) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
                                              AND CURRENT_DATE
GROUP BY DATE(FROM_UNIXTIME(v.timestamp))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolom MySQL =0 mengembalikan true

  2. SQL:apakah kita memerlukan kata kunci APAPUN/BEBERAPA dan SEMUA?

  3. Saya ingin menambahkan 30 hari ke baris tanggal mysql

  4. kueri dinamis mysql dalam prosedur tersimpan

  5. Laravel:cara mendapatkan rata-rata pada hubungan hasMany bersarang (hasManyThrough)