【问题标题】:Mysql - How to sum over some amount based on date?Mysql - 如何根据日期总结一些金额?
【发布时间】:2016-05-06 18:19:27
【问题描述】:

我有一张如下表

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

我想在 orderdate 上对苹果求和,以查看一个 ID 购买的苹果的累计总量。 例如,对于 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;

【问题讨论】:

    标签: mysql date sum


    【解决方案1】:

    你就快到了。

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

    如果orderdateDATE类型的列,则比较前不需要通过DATE_FORMAT,所以可以将DATE_FORMAT(*.orderdate, '%Y-%m-%d')简化为*.orderdate

    然后,连接将选择早于a 行的所有 记录。这进一步需要使用AND a.ID = b.ID 过滤以仅包含IDa 行相同的b 行。

    ORDER BY 子句是多余的,因为 MySQL 默认按 GROUP BY 子句排序。我还从您的原始查询中删除了一些不必要的别名。

    SELECT a.ID, a.orderdate, SUM(b.apple) apple 
    FROM testfinal3 a 
    JOIN testfinal3 b ON b.orderdate <= a.orderdate AND a.ID = b.ID
    GROUP BY a.ID, a.orderdate;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多