Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak pogrupować według miesiąca z pola Data za pomocą sql

Użyłbym tego:

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;

To zostanie pogrupowane według pierwszego dnia każdego miesiąca, więc

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

da '20130101' . Generalnie wolę tę metodę, ponieważ zachowuje daty jako daty.

Alternatywnie możesz użyć czegoś takiego:

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;

To naprawdę zależy od pożądanego wyniku. (W Twoim przykładzie rok zamknięcia nie jest konieczny, ale jeśli zakres dat przekracza granicę roku, może tak być).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OPCJA (REKOMPILACJA) jest zawsze szybsza; Czemu?

  2. Jak skopiować dane z ogromnej tabeli do innej tabeli w SQL Server

  3. Operacja nie obowiązuje dla stanu błędu transakcji i zakresu transakcji

  4. Jak uzyskać łączną sumę

  5. Co to jest procedura składowana i dlaczego procedura składowana?