sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Jak vybrat všechny dny v rozsahu dat, i když pro některé dny neexistují žádná data

Můžete použít rekurzivní CTE k sestavení seznamu 30 dnů a poté jej připojit ke svým datům

--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. Jak indexy ovlivňují výkon databáze?

  2. Dokumentace MAA pro Oracle Cloud

  3. [Video] Síla indexování v PostgreSQL

  4. Zkontrolujte statistické cíle v PostgreSQL