Dapatkan Tarikh Hilang dengan Nilai Sifar antara Julat Tarikh
Pertanyaan asal mendapatkan data antara dua tarikh, tetapi ia mengecualikan tarikh yang tiada. Untuk memasukkan tarikh yang tiada dan menetapkan nilai sifar untuk data yang hilang, kami boleh menggunakan teknik yang dipanggil "pembenderaan tarikh."
Membenderakan Tarikh Hilang
Jadual biasa rekursif ungkapan (CTE) boleh digunakan untuk menjana satu siri tarikh dalam julat yang ditentukan. CTE, bernama d, bermula dengan tarikh pertama julat dan secara rekursif menambah satu hari sehingga ia mencapai tarikh tamat.
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' )
Menyertai dengan Data Sedia Ada
Seterusnya, kami melakukan cantuman luar kiri antara CTE d dan suhu jadual data asal (t) untuk mendapatkan semula data sedia ada untuk setiap tarikh. Jika tarikh wujud dalam temp, nilai digunakan; jika tidak, kami menggantikan sifar.
select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
Nota tentang MAXRECURSION
Klausa OPTION (MAXRECURSION 0) menghalang pertanyaan daripada gagal disebabkan ulangan yang berlebihan jika julat tarikh terlalu besar. Anda boleh melaraskan nilai agar sesuai dengan julat data khusus anda.
Dengan menggunakan teknik ini, kami boleh mendapatkan semua tarikh antara dua tarikh, termasuk tarikh yang hilang, sambil memastikan nilai yang hilang diwakili sebagai sifar.
Atas ialah kandungan terperinci Bagaimana untuk Mengisi Tarikh Hilang dengan Nilai Sifar dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!