Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sélectionnez le compte avec 0 compte

En développant la réponse de KM, vous avez besoin d'un tableau de dates qui ressemble à un tableau de nombres. Il existe de nombreux exemples sur le Web, mais en voici un simple.

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

Vous avez maintenant un tableau

alors vous pouvez réécrire votre requête comme suit :

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

Deux remarques :vous aurez besoin d'une clause where pour spécifier votre plage. Une jointure sur un cast n'est pas idéale. Le type de votre table de dates doit correspondre au type de votre table habituelle.