sql >> Database >  >> RDS >> Sqlserver

Selecteer telling met 0 telling

Voortbouwend op het antwoord van KM, heb je een datumtabel nodig die lijkt op een getallentabel. Er zijn veel voorbeelden op internet, maar hier is een eenvoudige.

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

Nu heb je een tafel

dan kunt u uw vraag als volgt herschrijven:

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

Twee opmerkingen:je hebt een where-clausule nodig om je bereik te specificeren. Een join op een cast is niet ideaal. Het type in uw datumtabel moet overeenkomen met het type in uw gewone tabel.



  1. Wat veroorzaakt het verschil tussen CPU-tijd en verstreken tijd in Oracle tkprof-bestanden?

  2. Hoofdouder krijgen

  3. mysql_num_rows vervanging aan te bevelen?

  4. Oracle PL/SQL Bulk Collect met uitzonderingen opslaan Voorbeeld