sql >> Database >  >> RDS >> Sqlserver

SQL Server:alle dagen in een datumbereik selecteren, zelfs als er enkele dagen geen gegevens zijn

U kunt een recursieve CTE gebruiken om uw lijst van 30 dagen samen te stellen en deze vervolgens aan uw gegevens toevoegen

--test
select cast('05 jan 2011' as datetime) as DT, 1 as val into #t
union all select CAST('05 jan 2011' as datetime), 1 
union all select CAST('29 jan 2011' as datetime), 1 

declare @start datetime = '01 jan 2011'
declare @end   datetime = dateadd(day, 29, @start)

;with amonth(day) as
(
    select @start as day
        union all
    select day + 1
        from amonth
        where day < @end
)
select amonth.day, count(val)
    from amonth 
    left join #t on #t.DT = amonth.day
group by amonth.day


>>

2011-01-04 00:00:00.000 0
2011-01-05 00:00:00.000 2
2011-01-06 00:00:00.000 0
2011-01-07 00:00:00.000 0
2011-01-08 00:00:00.000 0
2011-01-09 00:00:00.000 0
...


  1. Verwijder rare tekens (A met hoed) uit de SQL Server varchar-kolom

  2. Hoe kan ik dubbele rijen verwijderen?

  3. Leer hoe je formulieren in het geheugen kunt spawnen (ja, dat heb je goed gehoord)

  4. Kun je een index maken in de CREATE TABLE-definitie?