SQLを使用して日付フィールドから月ごとにグループ化する方法 質問する

SQLを使用して日付フィールドから月ごとにグループ化する方法 質問する

日付フィールドから月のみでグループ化するにはどうすればよいでしょうか (日ごとにグループ化するのではなく)?

日付フィールドは次のようになります。

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

ベストアンサー1

私はこれを使います:

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;

実際には、必要な出力が何であるかによって異なります。(例では決算年は必要ありませんが、日付範囲が年の境界を越える場合は必要になる場合があります)。

おすすめ記事