ventas varios semana rango por mes horas fechas cantidad campos año agrupar sql sql-server tsql

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


FORMAT 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