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

Perbandingan tanggal/penulis MySQL

Saya rasa Anda harus membuat tabel referensi tanggal, mengisi tabel itu dan kemudian LEFT OUTER JOIN dari tabel itu dalam kueri Anda. Masalah 'Bagaimana Saya Menampilkan Tanggal yang Hilang?' adalah pertanyaan SO umum tapi aku akan tetap melakukannya.

Langkah Awal

Saat menjalankan perintah mysql:

use WordPress;

Langkah 1 - Buat Tabel Referensi Tanggal

create table all_date 
(id int unsigned not null primary key auto_increment, 
a_date date not null,
last_modified timestamp not null default current_timestamp on update current_timestamp,
unique key `all_date_uidx1` (a_date));

Langkah 2 - Isi Tabel Referensi Tanggal

Ide tabel ini adalah memiliki satu baris untuk setiap tanggal. Sekarang Anda dapat mencapainya dengan menjalankan pernyataan penyisipan ad nauseum tetapi mengapa tidak menulis rutin untuk mengisinya untuk Anda (Anda dapat membuat acara Acara terjadwal MySQL untuk memastikan bahwa Anda selalu memiliki set tanggal yang lengkap dalam tabel. Berikut saran untuk rutinitas itu:

DELIMITER //


CREATE PROCEDURE populate_all_dates(IN from_date DATE, IN days_into_future INT)

BEGIN

 DECLARE v_date DATE;
 DECLARE ix int;


 SET ix := 0;
 SET v_date := from_date;


 WHILE v_date <= (from_date + interval days_into_future day) DO

  insert into all_date (a_date) values (v_date) 
  on duplicate key update last_modified = now();

  set ix := ix +1;

  set v_date := from_date + interval ix day;

 END WHILE;

END//

DELIMITER ;

Anda sekarang dapat menjalankan:

call populate_all_dates('2011-10-01',30);

Untuk mengisi semua tanggal untuk bulan Oktober (atau cukup aktifkan days_into_the_future parameter apa pun yang Anda inginkan).

Sekarang setelah Anda memiliki tabel referensi tanggal dengan semua tanggal yang ingin Anda isi, Anda dapat melanjutkan dan menjalankan kueri Anda untuk bulan Oktober:

select day(a.a_date) as 'October',
IFNULL(t.a1,0) as 'Auth1',
IFNULL(t.a2,0) as 'Auth2',
IFNULL(t.a50,0) as 'Auth50'
from all_date a
LEFT OUTER JOIN
(
SELECT date(wp.post_date) as post_date,
sum(case when wp.post_author = '1' then 1 else 0 end) as a1,
sum(case when wp.post_author = '2' then 1 else 0 end) as a2,
sum(case when wp.post_author = '50' then 1 else 0 end) as a50,
count(*) as 'All Auths'
FROM wp_posts wp
WHERE  wp.post_type = 'post'
AND wp.post_date  between '2011-10-01' and '2011-10-31 23:59:59'
GROUP BY date(wp.post_date)
) t
ON a.a_date = t.post_date
where a.a_date between '2011-10-01' and '2011-10-31'
group by day(a.a_date);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara Memperbarui tabel yang sama saat dihapus di MYSQL?

  2. Menampilkan gambar dari jalur di PHP dari MySQL

  3. org.hibernate.HibernateException:simpan tidak valid tanpa transaksi aktif

  4. Panggilan fungsi MySQL

  5. MySQL COUNT() – Dapatkan Jumlah Baris yang Akan Dikembalikan oleh Query