1. ホーム
  2. sql

[解決済み] SQLでDateフィールドから月別にグループ化する方法

2022-10-10 10:57:11

質問

日付フィールドから月だけでグループ化するにはどうしたらよいでしょうか(日によるグループ化はしない)?

私の日付フィールドは以下のようなものです。

2012-05-01

以下は現在のSQLです。

select  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  Closing_Date, Category

どのように解決するのですか?

私ならこうします。

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;

これは、毎月1日ごとにグループ化するので

`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;

本当に必要な出力は何なのかによります。(あなたの例では年を閉じることは必要ありませんが、日付範囲が年の境界を越える場合は必要かもしれません)。