Mysql - 如何根据日期汇总一些金额?

时间:2016-05-06 18:19:28

标签: mysql date sum

我有一张表如下

+------+------------+-------+
| ID   | orderdate  | apple |
+------+------------+-------+
| 1005 | 2015-05-05 |     2 |
| 1005 | 2015-05-06 |     0 |
| 1006 | 2011-05-06 |     3 |
| 1006 | 2011-10-06 |     3 |
+------+------------+-------+

我想把苹果总结一下,看看苹果购买的苹果的累积量。 例如,对于ID 1006,该人在2015-05-06总共买了3个苹果,并在2011-10-06买了3个苹果,所以在2015-05-06,ID 1006买了6个,其中由(3 + 3)计算,总计为苹果。 因此,我的表格看起来像这样:

+------+------------+--------------------+
| ID   | orderdate  | accumulative apple |
+------+------------+--------------------+
| 1005 | 2015-05-05 |                  2 |
| 1005 | 2015-05-06 |                  2 | (0 + 2 )
| 1006 | 2011-05-06 |                  3 |
| 1006 | 2011-10-06 |                  6 | (3 + 3)
+------+------------+--------------------+  

我的代码显示如下,但事实证明这是一个非常奇怪的结果..有人请帮助我吗?

select a.ID ID, a.orderdate orderdate, sum(b.apple) apple 
from testfinal3 a 
join testfinal3 b 
on date_format(b. OrderDate, '%Y-%m-%d') >= date_format(a. OrderDate, '%Y-%m-%d') 
group by ID, orderdate 
order by ID, orderdate;

1 个答案:

答案 0 :(得分:0)

你几乎就在那里。

您的比较运算符是错误的方式。您希望使用a.orderdate将所有结果加入到早于或等于a的所有结果中,包括<=行本身。

如果orderdateDATE类型的列,则您无需在比较前通过DATE_FORMAT,因此您可以将DATE_FORMAT(*.orderdate, '%Y-%m-%d')简化为{{1 }}

然后,联接将选择早于*.orderdate行的所有记录。这进一步需要使用a过滤为仅包含与b行具有相同ID的{​​{1}}行。

a子句是多余的,因为MySQL默认按AND a.ID = b.ID子句排序。我还从原始查询中删除了一些不必要的别名。

ORDER BY