sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan grupperes efter måned fra Dato-feltet ved hjælp af sql

Jeg ville bruge dette:

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;

Dette grupperes efter den første i hver måned, så

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

vil give '20130101' . Jeg foretrækker generelt denne metode, da den holder datoer som datoer.

Alternativt kan du bruge noget som dette:

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 afhænger virkelig af, hvad dit ønskede output er. (Afslutningsår er ikke nødvendigt i dit eksempel, men hvis datointervallet krydser en årsgrænse kan det være det).



  1. Returner de søgte data fra sqlite

  2. nær synatx-fejl (kode 1) indsæt Android SQLite

  3. Husk dette, når du formaterer en TIME-datatype i SQL Server (T-SQL)

  4. Hvordan udfylder man ListView med db i aktivmappen?