code

MySQL에서 월 및 연도별로 그룹화

codestyles 2020. 10. 20. 07:40
반응형

MySQL에서 월 및 연도별로 그룹화


각 행에 타임 스탬프가있는 테이블이 주어지면이 특정 json 개체 형식에 맞게 쿼리 형식을 지정하는 방법은 무엇입니까?

나는 json 객체를 년 / 월로 구성하려고합니다.

쿼리를 기반으로하는 json :

{
  "2009":["August","July","September"],
  "2010":["January", "February", "October"]
}

지금까지 내가 가진 쿼리는 다음과 같습니다.

SELECT
    MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
    trading_summary t 
GROUP BY MONTH(t.summaryDateTime) DESC";

쿼리는 (예측 가능하게) 서로 다른 연도를 함께 묶기 때문에 분류됩니다.


GROUP BY YEAR(t.summaryDateTime), MONTH(t.summaryDateTime) DESC;

당신이 원하는 것입니다.


GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m')

SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM trading_summary t
GROUP BY YEAR(t.summaryDateTime) DESC, MONTH(t.summaryDateTime) DESC

올바른 순서를 얻으려면 연도와 월 모두에 DESC를 사용해야합니다.


나는 선호한다

SELECT
    MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
    trading_summary t 
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";

이것은 오래된 질문이라는 것을 알고 있지만 DB 수준에서 월 이름이 필요하지 않으면 다음이 작동합니다.

  SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month 
    FROM trading_summary  
GROUP BY summary_year_month;

EXTRACT 함수 문서보기

성능이 더 좋을 것입니다. 응용 프로그램 계층에서 JSON 개체를 빌드하는 경우 결과를 실행하면서 서식 지정 / 순서를 지정할 수 있습니다.

NB MySQL의 GROUP BY 절에 DESC를 추가 할 수 있다는 것을 몰랐습니다. 아마도 ORDER BY 절이 누락되었을 수 있습니다.

  SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month 
    FROM trading_summary  
GROUP BY summary_year_month
ORDER BY summary_year_month DESC;

이런 식으로해야합니다

SELECT onDay, id, 
sum(pxLow)/count(*),sum(pxLow),count(`*`),
CONCAT(YEAR(onDay),"-",MONTH(onDay)) as sdate 
FROM ... where stockParent_id =16120 group by sdate order by onDay

다음과 같이 EXTRACT 함수를 사용하십시오.

mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
       -> 2009

월별로만 그룹화합니다. 그룹에 YEAR ()를 추가해야합니다.


SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month 
FROM trading_summary t GROUP BY yr

그래도 찾고있는 구조를 정확하게 얻으려면 외부 스크립트에서 처리해야합니다.

예를 들어 PHP의 explode를 사용하여 월 이름 목록에서 배열을 만든 다음 json_encode ()를 사용합니다.


당신은 또한 이것을합니다

SELECT  SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12

연도 및 월별로 주문합니다. 올해와 이번 달부터 12 개월까지 주문하고 싶다고 가정 해 보겠습니다.


이것이 내가하는 방법입니다.

GROUP BY  EXTRACT(YEAR_MONTH FROM t.summaryDateTime);

사용하다

GROUP BY year, month DESC";

대신에

GROUP BY MONTH(t.summaryDateTime) DESC";

참고 URL : https://stackoverflow.com/questions/3366895/group-by-month-and-year-in-mysql

반응형