Първо, изглежда, че вашето приложение ще се възползва от таблица с календар. Календарната таблица е списък с дати и информация за датите.
Второ, можете да направите това без да използвате временни таблици. Ето подхода:
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
Ето идеята. Константите на псевдоними записват най-ранната дата във вашата таблица. След това псевдонимът дати създава поредица от дати. Вътрешната подзаявка изчислява поредица от цели числа, използвайки rownum, и след това ги добавя към първата дата. Имайте предвид, че това предполага, че имате средно поне една транзакция на дата. Ако не, можете да използвате по-голяма маса.
Последната част е съединението, което се използва за връщане на информация за датите. Обърнете внимание на използването на count(t.date) вместо count(*). Това отчита броя на записите във вашата таблица, който трябва да бъде 0 за дати без данни.