2012-08-13 68 views
0

我有一個表結構和樣本數據是這樣的:如何選擇過去六個月的銷售價值?

+----+-----------+------+-------+---------+ 
| id | item_code | year | month | sales | 
+----+-----------+------+-------+---------+ 
| 1 | 12341 | 2011 | 10 | 1000000 | 
+----+-----------+------+-------+---------+ 
| 2 | 12342 | 2011 | 11 | 2000000 | 
+----+-----------+------+-------+---------+ 
| 3 | 12343 | 2011 | 12 | 3000000 | 
+----+-----------+------+-------+---------+ 
| 4 | 12344 | 2012 | 01 | 4000000 | 
+----+-----------+------+-------+---------+ 
| 5 | 12345 | 2012 | 02 | 5000000 | 
+----+-----------+------+-------+---------+ 
| 6 | 12346 | 2012 | 03 | 6000000 | 
+----+-----------+------+-------+---------+ 
| 7 | 12347 | 2012 | 04 | 6000000 | 
+----+-----------+------+-------+---------+ 

現在的問題是,例如當前月份是2012年(04 - 2012)八月,我們該如何選擇過去的半年數據,是:

+----+-----------+------+-------+---------+ 
| id | item_code | year | month | sales | 
+----+-----------+------+-------+---------+ 
| 1 | 12341 | 2011 | 10 | 1000000 | 
+----+-----------+------+-------+---------+ 
| 2 | 12342 | 2011 | 11 | 2000000 | 
+----+-----------+------+-------+---------+ 
| 3 | 12343 | 2011 | 12 | 3000000 | 
+----+-----------+------+-------+---------+ 
| 4 | 12344 | 2012 | 01 | 4000000 | 
+----+-----------+------+-------+---------+ 
| 5 | 12345 | 2012 | 02 | 5000000 | 
+----+-----------+------+-------+---------+ 
| 6 | 12346 | 2012 | 03 | 6000000 | 
+----+-----------+------+-------+---------+ 

...並獲得平均銷售價值?有任何想法嗎? TIA!

回答

3

要做的最好的事情就是重組你的表以包含正確的日期。如果需要,您可以將這些列保留在特定的目的中,但是具有正確的日期可以讓您使用強大的SQL函數,這些函數完全基於您現在需要執行的操作。

您將能夠例如做這樣的事情:

select someData from yourTable where columnDate>=date_sub(now(), interval 6 month); 

由於eggyal正確地提到,你就能很容易地得到這樣大量的聚合函數:

select avg(sales) from ... 

這將帶回您放入where條款的條件(如過去6個月)的平均銷售額。

如果你甚至不保持當前的年/月欄你可以得到info out of a date column像這樣的東西:

select date_format(columnDate, '%Y') from .... // output: 2012 

那是什麼?你想要這個月嗎?

select date_format(columnDate, '%m') from .... // output: 08 

那是什麼?你想要整個月份的名字? BAM!

select date_format(columnDate, '%M') from .... // output: August 
+0

+1我首先想到的:) – Havelock 2012-08-13 08:27:56

+2

然後得到平均,一個只需要'SELECT AVG(銷售)FROM ...' – eggyal 2012-08-13 08:38:50

+1

感謝您的想法,但該條款似乎沒有哪裏工作,它說:#1064 - 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'6 MONTH附近使用正確的語法。 – Mico 2012-08-13 11:18:52

相關問題