Rumah > Soal Jawab > teks badan
P粉7331667442023-08-25 00:59:49
Apabila saya perlu menangani masalah ini, untuk mengisi tarikh yang hilang, saya sebenarnya mencipta jadual rujukan yang mengandungi hanya semua tarikh yang saya minati dan menyertai jadual data pada medan tarikh. Ia kasar dan kasar, tetapi ia berkesan.
SELECT DATE(r.date),count(d.date) FROM dates AS r LEFT JOIN table AS d ON d.date = r.date GROUP BY DATE(r.date) ORDER BY r.date ASC;
Untuk output, saya akan menggunakan SELECT INTO OUTFILE dan bukannya menjana CSV secara manual. Dengan cara ini kita tidak perlu risau tentang melarikan diri daripada watak istimewa.
P粉5936497152023-08-25 00:39:00
Apabila anda memerlukan sesuatu yang serupa di bahagian pelayan, anda biasanya membuat jadual yang mengandungi semua tarikh yang mungkin antara dua titik dalam masa, dan kemudian meninggalkan sertai jadual ini dengan hasil pertanyaan. Serupa dengan:
create procedure sp1(d1 date, d2 date) declare d datetime; create temporary table foo (d date not null); set d = d1 while d <= d2 do insert into foo (d) values (d) set d = date_add(d, interval 1 day) end while select foo.d, count(date) from foo left join table on foo.d = table.date group by foo.d order by foo.d asc; drop temporary table foo; end procedure
Dalam kes khusus ini, adalah lebih baik untuk melakukan semakan pada bahagian pelanggan dan menambah beberapa rentetan tambahan jika tarikh semasa bukan hari selepas hari sebelumnya.