Za prvé, zdá se, že vaší aplikaci by prospěla tabulka kalendáře. Tabulka kalendáře je seznam dat a informace o datech.
Za druhé, můžete to udělat bez použití dočasných tabulek. Zde je přístup:
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
Tady je nápad. Konstanty aliasů zaznamenají nejstarší datum ve vaší tabulce. Alias data pak vytvoří sekvenci dat. Vnitřní poddotaz vypočítá posloupnost celých čísel pomocí rownum a poté je přidá k prvnímu datu. Všimněte si, že to předpokládá, že máte v průměru alespoň jednu transakci za datum. Pokud ne, můžete použít větší stůl.
Poslední částí je spojení, které se používá k návratu informací o datech. Všimněte si použití count(t.date) místo count(*). Toto spočítá počet záznamů ve vaší tabulce, který by měl být 0 pro data bez dat.