sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo agrupar por mes desde el campo Fecha usando sql

Yo usaría esto:

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;

Esto se agrupará por el primero de cada mes, por lo que

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

dará '20130101' . Generalmente prefiero este método ya que mantiene las fechas como fechas.

Alternativamente, podría usar algo como esto:

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;

Realmente depende de cuál sea el resultado deseado. (El año de cierre no es necesario en su ejemplo, pero si el rango de fechas cruza el límite de un año, puede serlo).