sql >> Databáze >  >> RDS >> Sqlserver

Jak seskupit podle měsíce z pole Datum pomocí sql

Použil bych toto:

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;

Tím se seskupí podle prvního každého měsíce, takže

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

poskytne '20130101' . Obecně preferuji tuto metodu, protože zachovává data jako data.

Případně můžete použít něco takového:

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;

Opravdu záleží na tom, jaký je váš požadovaný výstup. (Uzavření roku není ve vašem příkladu nutné, ale pokud časové období překročí hranici roku, může to tak být.



  1. Ovladač JDBC PostgreSQL pro Android

  2. Jednoduchý případ použití pro indexy na primárních klíčích

  3. Jak nastavit proměnnou z SQL dotazu?

  4. Jak zkontrolovat, zda kurzor vrací nějaké záznamy v oracle?