sql >> データベース >  >> RDS >> Sqlserver

SQL Server:一部の日にはデータが存在しない場合でも、日付範囲内のすべての日を選択する方法

    再帰CTEを使用して30日のリストを作成し、それをデータに結合できます

    --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. GiSTとGINインデックスの違い

    2. 私のお気に入りのPostgreSQL拡張機能-パート2-

    3. MariaDB文字列関数(完全なリスト)

    4. Ubuntu 10.10(Maverick)でphpMyAdminを使用してMySQLを管理する