2012-08-13 65 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

相关问题