sql >> Database >  >> RDS >> Sqlserver

Hoe te groeperen op maand vanuit het veld Datum met sql

Ik zou dit gebruiken:

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;

Dit wordt gegroepeerd op de eerste van elke maand, dus

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

geeft '20130101' . Ik geef over het algemeen de voorkeur aan deze methode omdat het datums als datums houdt.

U kunt ook zoiets als dit gebruiken:

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;

Het hangt er echt van af wat je gewenste output is. (Jaar afsluiten is in uw voorbeeld niet nodig, maar als het datumbereik een jaargrens overschrijdt, kan dat wel).



  1. Handtekening opslaan in MySQL

  2. cross-app xml-query presteert exponentieel slechter naarmate xml-document groeit

  3. MySQL Bestel voor Groeperen op

  4. Kan vooraf gemaakte db niet kopiëren van activa