Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách nhóm theo tháng từ trường Ngày sử dụng sql

Tôi sẽ sử dụng cái này:

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;

Điều này sẽ nhóm vào ngày đầu tiên của mỗi tháng, vì vậy

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

sẽ cung cấp cho '20130101' . Tôi thường thích phương pháp này hơn vì nó giữ nguyên ngày tháng.

Ngoài ra, bạn có thể sử dụng một cái gì đó như thế này:

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;

Nó thực sự phụ thuộc vào đầu ra mong muốn của bạn là gì. (Trong ví dụ của bạn không cần phải có Năm kết thúc, nhưng nếu phạm vi ngày vượt qua ranh giới của năm thì có thể là như vậy).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm nạp số lượng hàng cho tất cả các bảng trong cơ sở dữ liệu SQL SERVER

  2. Cách chọn JSON lồng nhau trong SQL Server với OPENJSON

  3. Trả lại danh sách các bảng từ một máy chủ được liên kết trong SQL Server (ví dụ T-SQL)

  4. Mệnh đề VALUES trong SQL Server

  5. Làm cách nào để bạn thêm một cột NOT NULL vào một bảng lớn trong SQL Server?