varios - cantidad de ventas por mes sql
Cómo agrupar por mes desde el campo Fecha usando sql (8)
¿Cómo puedo agrupar solo por mes desde un campo de fecha (y no por grupo)?
Aquí está el aspecto de mi campo de fecha:
2012-05-01
Aquí está mi SQL actual:
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
Al agregar MONTH(date_column)
en 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
Intenté la solución de user1845584. sql dio error en el campo Categoría. Así que lo eliminé y funcionó. También agregué:
select Year(Closing_Date), Month(Closing_Date)"
Que era mejor Significa que he enumerado el recuento según el año y el mes.
La función DATEPART no funciona en MySQL 5.6, en su lugar usa MONTH (''2018-01-01'')
Pruebe el siguiente código
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;
Puede hacerlo utilizando Year (), Month () Day () y datepart ().
En tu ejemplo, esto sería:
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
Use la función DATEPART para extraer el mes de la fecha.
Entonces 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)
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á el primero de cada mes, por lo
`DATEADD(MONTH, DATEDIFF(MONTH, 0, ''20130128''), 0)`
dará ''20130101''
. Generalmente prefiero este método, ya que mantiene las fechas como fechas.
Alternativamente, podrías 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 es tu salida deseada. (El año de cierre no es necesario en su ejemplo, pero si el rango de fechas cruza un límite de un año puede ser).