2010-07-29 110 views
56

給定一個每行有時間戳的表,如何格式化查詢以適應特定的json對象格式。在MySQL中按月份和年份分組

我想組織一個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, month DESC"; 

而不是

GROUP BY MONTH(t.summaryDateTime) DESC"; 

回答

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

+0

這個工程。非常感謝你! – 2010-07-29 21:04:08

+1

@德瑞克 - 沒問題,樂意幫忙 – 2010-07-29 21:04:40

+36

+1:另一種替代方法是使用[DATE_FORMAT](http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date -format):'DATE_FORMAT(t.summaryDateTime,'%Y-%m')' – 2010-07-29 21:07:11

-2

是你想要的。

+0

相同的結果..... – 2010-07-29 21:01:50

+0

雖然看起來GROUP BY MONTH(t.summaryDateTime)DESC沒有按由於某種原因,請妥善訂購這些月份...... – 2010-07-29 21:03:24

+0

抱歉。 – Kyra 2010-07-29 21:17:08

0

您每月只進行分組,您必須通過

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

添加YEAR()到該組還有你需要處理它在外部腳本獲得正是你要尋找的結構。

例如使用PHP的爆炸來創建月份名稱的列表數組,然後使用json_encode()

2

你必須做這樣的事情

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 
5
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爲獲得正確的訂單。

1

使用EXTRACT函數這樣

mysql> SELECT EXTRACT(YEAR FROM '2009-07-02'); 
     -> 2009 
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"; 
42
GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m') 
+1

提供了詳細信息,則需要使用-time-functions.html#function_from-unixtime。 – Parixit 2014-04-14 12:26:35

+0

歡迎來到StackOverflow!這是一個古老而已經回答的問題。如果您也可以提出更緊迫的問題,我們會很高興。你可以找到提示,以提供很好的答案[這裏](http://stackoverflow.com/help/how-to-answer)。 – Mifeet 2014-04-14 13:18:42