복붙노트

[SQL] MySQL은 달과 연도 별 그룹

SQL

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

그것은 다른 년간 함께 덩어리 (예상) 때문에 쿼리는 분해된다.

해결법

  1. ==============================

    1.

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

    당신이 원하는 것입니다.

  2. ==============================

    2.

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

    3.

    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를 사용해야합니다.

  4. ==============================

    4.나는 선호한다

    나는 선호한다

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

    5.나는이 오래된 질문 알아요,하지만 당신은 DB 수준에서 월 이름 필요하지 않은 경우 다음 작업을해야합니다 :

    나는이 오래된 질문 알아요,하지만 당신은 DB 수준에서 월 이름 필요하지 않은 경우 다음 작업을해야합니다 :

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

    EXTRACT 기능 문서를 참조하십시오

    당신은 아마이 수행 더 좋을 찾을 것입니다 .. 당신은 응용 프로그램 계층에서 JSON 객체를 구축하는 경우 당신이 결과를 통해 실행, 당신은 포맷 / 주문을 할 수 있습니다.

    N.B. 나는 당신이 아마 당신이 ORDER BY 절을 누락, MySQL의에서 GROUP BY 절에 DESC를 추가 할 수 있습니다 인식하지 않았다 :

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

    6.이 같은 작업을 수행해야합니다

    이 같은 작업을 수행해야합니다

    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
    
  7. ==============================

    7.이 같은 사용 EXTRACT 기능

    이 같은 사용 EXTRACT 기능

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

    8.또한이 작업을 수행 할 수 있습니다

    또한이 작업을 수행 할 수 있습니다

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

    년 월별 순서. 이 대비하기 위해 이번 달 12 개의 달 방식 뒤로 싶은 말은하자

  9. ==============================

    9.당신은 월별로 그룹화 만, 당신은에 의해 그룹에 YEAR ()를 추가해야

    당신은 월별로 그룹화 만, 당신은에 의해 그룹에 YEAR ()를 추가해야

  10. ==============================

    10.

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

    아직 정확히 당신이 찾고있는 구조를 얻기 위해 외부 스크립트에서 처리해야합니다.

    예를 들어, 사용을 위해 PHP는 () 월 이름의 목록 후 사용로 json_encode에서 배열을 만들 폭발

  11. ==============================

    11.이것은 내가 그것을 할 방법입니다 :

    이것은 내가 그것을 할 방법입니다 :

    GROUP BY  EXTRACT(YEAR_MONTH FROM t.summaryDateTime);
    
  12. ==============================

    12.사용하다

    사용하다

    GROUP BY year, month DESC";
    

    대신에

    GROUP BY MONTH(t.summaryDateTime) DESC";
    
  13. from https://stackoverflow.com/questions/3366895/group-by-month-and-year-in-mysql by cc-by-sa and MIT license