Генерировать количество записей за каждый день недели - PullRequest
0 голосов
/ 31 мая 2019

Я использую 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 Ответ

1 голос
/ 31 мая 2019

Один из способов вернуть все дни в пределах диапазона, возвращенного с вашими данными, объединенными в соответствующие дни, состоит в том, чтобы использовать таблицу «календарь» и оставить данные по дате.

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...