113

日付フィールドから月のみでグループ化するにはどうすればよいですか(日ごとにグループ化することはできません)。

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

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
4

10 に答える 10

135

私はこれを使用します:

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;

それは本当にあなたの望む出力が何であるかに依存します。(この例では、年を閉じる必要はありませんが、日付範囲が年の境界を超える場合は必要になる可能性があります)。

于 2013-01-28T16:01:01.677 に答える
46

DATEPART関数を使用して、日付から月を抽出します。

したがって、次のようなことを行います。

SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount
FROM t
GROUP BY DATEPART(month, Closing_Date)
于 2013-01-28T16:00:35.657 に答える
19

これを実現するためにFORMAT関数を使用しました。

select
 FORMAT(Closing_Date, 'yyyy_MM') AS Closing_Month
 , count(*) cc 
FROM
 MyTable
WHERE
 Defect_Status1 IS NOT NULL
 AND Closing_Date >= '2011-12-01'
 AND Closing_Date < '2016-07-01' 
GROUP BY FORMAT(Closing_Date, 'yyyy_MM')
ORDER BY Closing_Month
于 2016-10-05T01:55:57.300 に答える
12

追加することMONTH(date_column)によってGROUP BY

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 MONTH(Closing_Date), Category
于 2017-10-04T10:25:00.403 に答える
2

これを試して:

select min(closing_date), date_part('month',closing_date) || '-' || date_part('year',closing_date) AS month,
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 month, Category,
ORDER BY 1

このようにして、連結された日付形式でグループ化し、-で結合します。

于 2019-11-15T14:37:35.253 に答える
1

DATEPART関数はMySQL5.6では機能しません。代わりに、MONTH( '2018-01-01')を使用してください。

于 2018-04-23T14:18:14.693 に答える
0
SELECT  to_char(Closing_Date,'MM'), 
        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 Category;
于 2018-11-06T08:08:03.357 に答える
0

上記のSQLServer2012バージョン、

SELECT  format(Closing_Date,'yyyy-MM') as ClosingMonth,
        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 format(Closing_Date,'yyyy-MM'), Category;
于 2020-09-15T02:47:36.167 に答える
-1

これを行うには、Year()、Month()、Day()、およびdatepart()を使用します。

あなたの例では、これは次のようになります。

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 Year(Closing_Date), Month(Closing_Date), Category
于 2013-01-28T16:00:44.080 に答える
-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;
于 2018-06-27T12:33:53.277 に答える