[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



답변

나는 이것을 사용할 것이다 :

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;

실제로 원하는 출력이 무엇인지에 따라 다릅니다. (귀하의 예에서 마감 연도는 필요하지 않지만 날짜 범위가 연도 경계를 넘으면 그럴 수 있습니다).


답변

DATEPART 함수를 사용하여 날짜에서 월을 추출합니다.

따라서 다음과 같이 할 수 있습니다.

SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount
FROM t
GROUP BY DATEPART(month, Closing_Date)


답변

이를 위해 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


답변

추가함으로써 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


답변

DATEPART 함수는 MySQL 5.6에서 작동하지 않고 대신 MONTH ( ‘2018-01-01’)를 사용합니다.


답변

이 시도:

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

이렇게하면 연결된 날짜 형식으로 그룹화하고-


답변

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;