sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Sådan vælger du alle dage i et datointerval, selvom der ikke eksisterer nogen data i nogle dage

Du kan bruge en rekursiv CTE til at opbygge din liste over 30 dage, og derefter tilføje den til dine data

--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. Sådan kontrolleres størrelsen af ​​en database i MySQL

  2. Java:Kaldning af en lagret procedure i en oracle-database

  3. Oracle datosammenligning brudt på grund af sommertid

  4. PostgreSQL videregiver data fra rekursiv CTE til funktion