Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да групирате по месеци от полето Дата с помощта на sql

Бих използвал това:

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;

Това ще се групира до първо число на всеки месец, така че

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

ще даде '20130101' . Обикновено предпочитам този метод, тъй като запазва датите като дати.

Като алтернатива можете да използвате нещо подобно:

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;

Наистина зависи какъв е желаният от вас изход. (Годината на затваряне не е задължителна във вашия пример, но ако периодът от време пресича границата на година, може да бъде).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LEFT JOIN срещу LEFT OUTER JOIN в SQL Server

  2. Защо не мога да използвам псевдоним в израза DELETE?

  3. Как да ограничите редовете в набор от резултати на SQL Server

  4. SQL Server 2008 Вертикални данни към хоризонтални

  5. Клауза WHERE за тип данни на SQL Server Text