sql >> Databasteknik >  >> RDS >> Sqlserver

Så här grupperar du efter månad från datumfältet med sql

Jag skulle använda detta:

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;

Detta kommer att grupperas efter den första varje månad, så

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

ger '20130101' . Jag föredrar i allmänhet den här metoden eftersom den behåller datum som datum.

Alternativt kan du använda något i stil med detta:

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;

Det beror verkligen på vad du vill ha. (Avsluta år är inte nödvändigt i ditt exempel, men om datumintervallet passerar en årsgräns kan det vara det).



  1. Hur bygger man om en inkonsekvent MySQL-slav?

  2. MySQL, Sammanfoga två kolumner

  3. Hur man använder EXECUTE FORMAT ... ANVÄNDER i postgres-funktionen

  4. Hur man hittar den optimala unika identifieraren i en tabell i SQL Server:sp_special_columns