2013-08-21 58 views
1

我想在我的PHP-MySQL中使用BETWEENPHP MySQL SUM Between Month

例如,我有表:

badge_id | balance_type | balance_amount | balance_month 
110702 | aa   | 250000   | January-2013 
110702 | ab   | 100000   | January-2013 
110702 | aa   | 100000   | February-2013 
110702 | ab   | 90000   | February-2013 
110702 | aa   | 100000   | March-2013 
110702 | ab   | 110000   | March-2013 

現在我想SUM只是爲了平衡月份從一月2013至二月-2013。

SELECT balance_type AS balance_type, SUM(balance_amount) AS value_sum 
FROM t_balance 
WHERE badge_id = '110702' && balance_month BETWEEN 'August-2013' 
    and 'September-2013' 
GROUP BY balance_type 

但它會SUM所有balance_month。

有什麼建議嗎?

+0

是否有指定的數據範圍內多個'balance_type'值?可能,但是,你能否提供'八月-2013'和'九月-2013'之間的一些數據只是爲了檢查? –

+1

「balance_month」列的數據類型是什麼? – Adder

+0

我爲balance_month設置了varchar類型 –

回答

1

這是因爲你有一個balance_month的字符串列。 BETWEEN August-2013 and September-2013基本上是BETWEEN A AND S的字母表(不知道如何描述它更好,這裏缺乏英語技能)。 J表示一月和F二月是A和S之間,因此MySQL計數那些英寸轉換你列一個日期

WHERE ... AND STR_TO_DATE(balance_month, '%M-%Y') BETWEEN '2013-08-01' 
    and '2013-09-30' 

但是,如果我是你,我會擺脫列和使用一個真正的日期欄。否則索引不能用於它,當你總是不得不使用像str_to_date()這樣的函數。

0

彷彿是命運的不幸扭曲,所有月份August-2013September-2013之間 - 因爲你可能在日期比較。

在MySQL上,正確的日期有DATE(或一個可導出的)類型,應格式化爲YYYY-MM-DD

1

這將工作...

SELECT balance_type AS balance_type, SUM(balance_amount) AS value_sum 
FROM t_balance 
WHERE badge_id = '110702' && STR_TO_DATE(balance_month,'%M-%Y') BETWEEN '2013-08-01' 
    and '2013-09-30' 
GROUP BY balance_type
+0

不需要像其他人那樣應答。 – fancyPants