生成一周中每天的记录计数

时间:2019-05-31 13:57:24

标签: sql-server

我将SQL Server 2014用于我的项目。我有以下代码来产生每天的注册数量:

SELECT   
    DATEADD(DAY, DATEDIFF(DAY, 0, createTime), 0) AS createdOn, 
    COUNT(*) AS Count
FROM
    Registration
GROUP BY 
    DATEADD(DAY, DATEDIFF(DAY, 0, createTime), 0)
ORDER BY 
    createdOn

现在,我想获取一周中每天的数字(因此,输出中最多可以有7行)。我该怎么办?

这是我根据乔治的评论提出的解决方案。谢谢乔治!

SELECT   
    DATEPART(weekday, createTime) AS createdOn, 
    COUNT(*) AS Count
FROM
    Registration
GROUP BY 
    DATEPART(weekday, createTime)
ORDER BY 
    createdOn

1 个答案:

答案 0 :(得分:1)

一种返回与匹配日期结合在一起的数据所返回的范围内的所有日期的方法是使用“日历”表并按日期左联接您的数据。

DECLARE @StartDate DATETIME = '01/01/2015' 
DECLARE @EndDate DATETIME = '12/01/2016' 

//By Day In Year    
;WITH Calender as 
( 
    SELECT CalendarDate = @StartDate
    UNION ALL 
    SELECT CalendarDate = DATEADD(DAY, 1, CalendarDate)
    FROM Calender WHERE DATEADD (DAY, 1, CalendarDate) <= @EndDate 
)

SELECT 
    C.CalendarDate,
    COUNT(*) AS Count
FROM 
    Calender C
    LEFT JOIN Regsitration R ON R.createdOn = C.CalendarDate
GROUP BY
    C.CalendarDate
OPTION (MAXRECURSION 0) 

//By Week In Year

;WITH Calender as 
( 
    SELECT CalendarDate = @StartDate, WeekNumber=DATEPART(WEEK, @StartDate)
    UNION ALL 
    SELECT CalendarDate = DATEADD(WEEK, 1, CalendarDate), WeekNumber=DATEPART(WEEK, @StartDate)
    FROM Calender WHERE DATEADD (WEEK, 1, CalendarDate) <= @EndDate 
)

SELECT 
    C.WeekNumber,
    COUNT(*) AS Count
FROM 
    Calender C
    LEFT JOIN Regsitration R ON DATEPART(WEEK,R.createdOn) = C.WeekNumber
GROUP BY
    C.WeekNumber
OPTION (MAXRECURSION 0)