Подтвердить что ты не робот

Как группировать по месяцам из поля Date с помощью sql

Как я могу группировать только по месяцам из поля даты (а не по дням)?

Вот как выглядит мое поле даты:

2012-05-01

Вот мой текущий SQL:

select  Closing_Date, Category,  COUNT(Status)TotalCount from  MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31'
and Defect_Status1 is not null
group by  Closing_Date, Category
4b9b3361

Ответ 1

Я бы использовал это:

SELECT  Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), 
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;

Это будет группироваться по первому из каждого месяца, поэтому

`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)` 

даст '20130101'. Обычно я предпочитаю этот метод, поскольку он сохраняет даты как даты.

В качестве альтернативы вы можете использовать что-то вроде этого:

SELECT  Closing_Year = DATEPART(YEAR, Closing_Date),
        Closing_Month = DATEPART(MONTH, Closing_Date),
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;

Это действительно зависит от вашего желаемого результата. (Год закрытия не нужен в вашем примере, но если диапазон дат пересекает границу года, это может быть).

Ответ 2

Используйте функцию DATEPART, чтобы извлечь месяц с даты.

Итак, вы сделали бы что-то вроде этого:

SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount
FROM t
GROUP BY DATEPART(month, Closing_Date)

Ответ 3

Я попробовал решение user1845584. sql дал ошибку в поле Категория. Поэтому я удалил его, и он сработал. Также я добавил:

select Year(Closing_Date), Month(Closing_Date)"

Это было лучше. Это означает, что я перечислил счет в соответствии с годом и месяцем.

Ответ 4

Я использовал FORMAT, чтобы выполнить следующее:

select
 FORMAT(Closing_Date, 'yyyy_MM') AS Closing_Month
 , count(*) cc 
FROM
 MyTable
WHERE
 Defect_Status1 IS NOT NULL
 AND Closing_Date >= '2011-12-01'
 AND Closing_Date < '2016-07-01' 
GROUP BY FORMAT(Closing_Date, 'yyyy_MM')
ORDER BY Closing_Month

Ответ 5

Добавив MONTH(date_column) в GROUP BY.

SELECT Closing_Date, Category,  COUNT(Status)TotalCount
FROM   MyTable
WHERE  Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31'
AND    Defect_Status1 IS NOT NULL
GROUP BY MONTH(Closing_Date), Category

Ответ 6

Вы можете сделать это, используя Year(), Month() Day() и datepart().

В вашем примере это будет:

select  Closing_Date, Category,  COUNT(Status)TotalCount from  MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31' 
and Defect_Status1 is not null 
group by Year(Closing_Date), Month(Closing_Date), Category