Saltar al contenido

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

Entiende el código de forma correcta antes de adaptarlo a tu trabajo y si tquieres aportar algo puedes comentarlo.

Solución:

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).

Utilice la función DATEPART para extraer el mes de la fecha.

Así que harías algo como esto:

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

Usé la función FORMAT para lograr esto:

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

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *