For det første lyder det, som om din ansøgning ville have gavn af en kalendertabel. En kalendertabel er en liste over datoer og oplysninger om datoerne.
For det andet kan du gøre dette uden at bruge midlertidige tabeller. Her er fremgangsmåden:
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
Her er ideen. Aliaskonstanterne registrerer den tidligste dato i din tabel. Aliasdatoer opretter derefter en sekvens af datoer. Den indre underforespørgsel beregner en sekvens af heltal ved hjælp af rækkenumre og tilføjer derefter disse til den første dato. Bemærk dette forudsætter, at du i gennemsnit har mindst én transaktion pr. dato. Hvis ikke, kan du bruge et større bord.
Den sidste del er joinforbindelsen, der bruges til at bringe information tilbage om datoerne. Bemærk brugen af count(t.date) i stedet for count(*). Dette tæller antallet af poster i din tabel, som skal være 0 for datoer uden data.