我有一张表如下
+------+------------+-------+
| 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;
答案 0 :(得分:0)
你几乎就在那里。
您的比较运算符是错误的方式。您希望使用a.orderdate
将所有结果加入到早于或等于a
的所有结果中,包括<=
行本身。
如果orderdate
是DATE
类型的列,则您无需在比较前通过DATE_FORMAT
,因此您可以将DATE_FORMAT(*.orderdate, '%Y-%m-%d')
简化为{{1 }}
然后,联接将选择早于*.orderdate
行的所有记录。这进一步需要使用a
过滤为仅包含与b
行具有相同ID
的{{1}}行。
a
子句是多余的,因为MySQL默认按AND a.ID = b.ID
子句排序。我还从原始查询中删除了一些不必要的别名。
ORDER BY