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

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



답변

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 EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";


답변

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


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 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


답변

당신도 이것을합니다

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

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