MYSQL中当前行上日期之前(包括)的所有行的总和
知道日期在查询期间是未知的是很重要的,所以我不能硬编码一个WHERE子句 这是我的桌子:MYSQL中当前行上日期之前(包括)的所有行的总和,mysql,sql,cumulative-sum,Mysql,Sql,Cumulative Sum,知道日期在查询期间是未知的是很重要的,所以我不能硬编码一个WHERE子句 这是我的桌子: +-----------+----------+-------------+ | Date_ID | Customer | Order_Count | +-----------+----------+-------------+ | 20150101 | Jones | 6 | | 20150102 | Jones | 4 | | 20150103
+-----------+----------+-------------+
| Date_ID | Customer | Order_Count |
+-----------+----------+-------------+
| 20150101 | Jones | 6 |
| 20150102 | Jones | 4 |
| 20150103 | Jones | 3 |
+-----------+----------+-------------+
以下是所需的输出:
+-----------+----------+------------------+
| Date_ID | Customer | SUM(Order_Count) |
+-----------+----------+------------------+
| 20150101 | Jones | 6 |
| 20150102 | Jones | 10 |
| 20150103 | Jones | 13 |
+-----------+----------+------------------+
我想我需要使用一个变量或者一个连接
编辑:仍然无法足够快地获取它。非常慢。一种方法是使用子查询,将所有订单汇总到当前订单。也许不是最快的方法,但它应该可以做到
SELECT `Date_ID`, `Customer`,
(SELECT sum(b.`Order_Count`)
FROM tablename as b WHERE
b.`Date_ID` <= a.`Date_ID` AND
a.`customer = b.`Customer`)
FROM tablename as a
试试这个查询;这很可能是在不限制您操作的数据集的情况下所能做的最好的。它应该受益于索引客户date\u id
select
t1.date_id, t1.customer, sum(t2.order_count)
from
table1 t1
left join
table1 t2 on t1.customer = t2.customer
and t1.date_id >= t2.date_id
group by
t1.date_id, t1.customer;
< P>性能是一个问题,考虑一个类似如下的解决方案:
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT i,@i:=@i+i FROM ints, (SELECT @i:=0)n ORDER BY i;
+---+----------+
| i | @i:=@i+i |
+---+----------+
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
| 6 | 21 |
| 7 | 28 |
| 8 | 36 |
| 9 | 45 |
+---+----------+
给定您的输入数据,我看不出您希望如何获得所需的输出。您的数据集有多大,表上有哪些索引?对于任何非MySQL的RDBMS,您所需的输出都非常简单,因为不支持窗口函数。看,我有一个很大的数据集,子查询速度非常慢。另外,我认为在您的示例中我需要一个group by子句,因为实际上有不同的客户名称。将客户添加到子查询中,但它确实不是很快,因为它需要重新计算每个元素的完整和。索引应该会有所帮助。如果它仍然太慢,您可能需要考虑在SQL之外计算程序中的和。但到目前为止,无论客户名称如何,这都会对所有ID进行求和…而且group by也不会影响它…每个客户都应该独立求和。我想这就是选择提供具有适当代表性的DDL/SQLFIDLE与否的区别。