2010-02-09 96 views
0

我使用Open Flash Chart創建統計信息,我需要做的事情之一是生成堆疊條形圖。選擇不同的月份和年份,然後細分數值

從邏輯上說,我需要能夠將所有不同的月份/年份組合,2009年12月,2010年1月,2010年2月等等,然後從該組中所有不同的行,即訪問者進行的不同類型的查詢通過網站,通過電子郵件,通過phonecall)

此刻的表格屬性是這樣的:

ID(INT,自動增量) DATE_TIME(日期時間格式) 類型(枚舉,訪問,網站,電話,電子郵件)

有什麼建議嗎?我已經嘗試了一些東西,但沒有多少運氣。

回答

1

像這樣的東西應該工作:

select count(*), type, YEAR(date_time), MONTH(date_time) from `table` 
group by type, YEAR(date_time), MONTH(date_time) 
1
SELECT EXTRACT(YEAR_MONTH FROM date_time) AS ym, type, COUNT(*) 
FROM mytable 
GROUP BY 
     ym, type 
+0

酷,不知道'提取物(YEAR_MONTH ...)'! – Andomar 2010-02-09 14:52:14

0

你可以創建一個月份字段的表,並填充它爲你感興趣的幾個月裏,例如:

StartOfMonth 
2010-01-01 
2010-02-01 
2010-03-01 
... 

然後你可以使用left join到組上所有月份:

select  
    year(mt.StartOfMonth) 
, month(mt.StartOfMonth) 
, e.type 
, count(*) 
from  MonthTable mt 
left join Enquiries e 
on   mt.StartOfMonth <= e.EnquiryDate 
      and e.EnquiryDate < mt.StartOfMonth + interval 1 month 
where  mt.StartOfMonth <= NOW() 
group by year(mt.StartOfMonth), month(mt.StartOfMonth), e.type 
1

要組按年份和月份的sql可以是這樣的:

SELECT DATE_FORMAT(date_time, '%Y-%m') AS yearmonth, 
     COUNT(*) AS count_month 
FROM table_name 
GROUP BY yearmonth