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;
성능이 더 좋을 것입니다. 응용 프로그램 계층에서 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
'code' 카테고리의 다른 글
MongoDB Aggregation : 총 레코드 수를 얻는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
플래시 메시지가 사라지지 않는 이유는 무엇입니까? (0) | 2020.10.20 |
Java 인터페이스는 다중 상속을 어떻게 시뮬레이션합니까? (0) | 2020.10.20 |
치명적인 오류 : 최대 실행 시간 300 초를 초과했습니다. (0) | 2020.10.20 |
Android에서 선형 레이아웃 주위에 그림자를 표시하는 방법은 무엇입니까? (0) | 2020.10.20 |