SQL select, pad with chronological missing months

前端 未结 3 665
Happy的楠姐
Happy的楠姐 2020-12-21 02:22

Notice the 2015-02 and 2015-03 months are missing in the output from the following group by SQL. If there is no data for a month I wan

3条回答
  •  -上瘾入骨i
    2020-12-21 02:49

    If you don't want to go beyond your min and max dates of your results then you can do the following:

    WITH    cte
              AS ( SELECT convert(char(7), MeterReadDate, 121) AS [Date], COUNT(*) AS [Count]
                   FROM [myTable]
                   WHERE (MeterReadDate > dateadd(d,-356,getdate()))
                   GROUP by  convert(char(7), MeterReadDate, 121)
                 ),
            minmax
              AS ( SELECT   CAST(MIN([Date] + '-01') AS DATE) AS mind ,
                            CAST(MAX([Date] + '-01') AS DATE) maxd
                   FROM     cte
                 ),
            calendar
              AS ( SELECT   mind ,
                            CONVERT(CHAR(7), mind, 121) AS cmind
                   FROM     minmax
                   UNION ALL
                   SELECT   DATEADD(mm, 1, calendar.mind) ,
                            CONVERT(CHAR(7), DATEADD(mm, 1, calendar.mind), 121)
                   FROM     calendar
                            CROSS JOIN minmax
                   WHERE    calendar.mind < minmax.maxd
                 )
        SELECT  c.cmind AS [Date],
                ISNULL(cte.[Count], 0) AS [Count]
        FROM    calendar c
                LEFT JOIN cte ON c.cmind = cte.[Date]
        OPTION  ( MAXRECURSION 0 )
    

提交回复
热议问题