Espandendo la risposta di KM, hai bisogno di una tabella delle date che sia come una tabella di numeri. Ci sono molti esempi sul web, ma eccone uno semplice.
CREATE TABLE DateList (
DateValue DATE,
CONSTRAINT PK_DateList PRIMARY KEY CLUSTERED (DateValue)
)
GO
-- Insert dates from 01/01/2015 and 12/31/2015
DECLARE @StartDate DATE = '01/01/2015'
DECLARE @EndDatePlus1 DATE = '01/01/2016'
DECLARE @CurrentDate DATE = @StartDate
WHILE @EndDatePlus1 > @CurrentDate
BEGIN
INSERT INTO DateList VALUES (@CurrentDate)
SET @CurrentDate = DATEADD(dd,1,@CurrentDate)
END
Ora hai un tavolo
quindi puoi riscrivere la tua query come segue:
SELECT top (5) DateValue, isnull(Count(id),0) as Counted
FROM DateList
LEFT OUTER JOIN Table
on DateValue = CAST(Created AS DATE)
GROUP BY DateValue
order by DateValue desc
Due note:avrai bisogno di una clausola where per specificare il tuo intervallo. Un join su un cast non è l'ideale. Il tipo nella tabella delle date dovrebbe corrispondere al tipo nella tabella normale.