Pertama, sepertinya aplikasi Anda akan mendapat manfaat dari tabel kalender. Tabel kalender adalah daftar tanggal dan informasi tentang tanggal.
Kedua, Anda dapat melakukan ini tanpa menggunakan tabel sementara. Inilah pendekatannya:
with constants as (select min(thedate>) as firstdate from <table>)
dates as (select( <firstdate> + rownum - 1) as thedate
from (select rownum
from <table> cross join constants
where rownum < sysdate - <firstdate> + 1
) seq
)
select dates.thedate, count(t.date)
from dates left outer join
<table> t
on t.date = dates.thedate
group by dates.thedate
Inilah idenya. Konstanta alias mencatat tanggal paling awal di tabel Anda. Tanggal alias kemudian membuat urutan tanggal. Subquery dalam menghitung urutan bilangan bulat, menggunakan rownum, dan kemudian menambahkannya ke tanggal pertama. Perhatikan ini mengasumsikan bahwa Anda memiliki rata-rata setidaknya satu transaksi per tanggal. Jika tidak, Anda dapat menggunakan tabel yang lebih besar.
Bagian terakhir adalah join yang digunakan untuk mengembalikan informasi tentang tanggal. Perhatikan penggunaan count(t.date) alih-alih count(*). Ini menghitung jumlah catatan di tabel Anda, yang seharusnya 0 untuk tanggal tanpa data.