另一种选择。
使用内部子查询来获取唯一的时间戳(如果您有一个这样的表,它可能会更有效率,因为它可以有效地使用索引)。它被连接到表格以获得当天或之前的所有行,并且使用HAVING来排除总和为负的那些数量。
然后,外部查询计算内部查询中每个时间戳返回的客户数量。
SELECT sub1.Timestamp,
COUNT(sub1.CustomerID)
FROM
(
SELECT sub0.Timestamp, a.CustomerID, SUM(a.Amount) AS amount_sum
FROM
(
SELECT DISTINCT Timestamp
FROM amount_table
) sub0
LEFT OUTER JOIN amount_table a ON sub0.Timestamp >= a.Timestamp
GROUP BY Timestamp,
CustomerID
HAVING amount_sum > 0
) sub1
GROUP BY Timestamp
如果这可能会困难的是返回一个计数为0的行的时间戳,其中没有客户的积极金额达到该日期。可能不是你的问题,但如果它是: -
SELECT sub1.Timestamp,
SUM(IF(amount_sum > 0, 1, 0))
FROM
(
SELECT sub0.Timestamp, a.CustomerID, SUM(a.Amount) AS amount_sum
FROM
(
SELECT DISTINCT Timestamp
FROM amount_table
) sub0
LEFT OUTER JOIN amount_table a ON sub0.Timestamp >= a.Timestamp
GROUP BY Timestamp,
CustomerID
) sub1
GROUP BY Timestamp
这不是一个累计总和,这是一个按组计数。 – Shadow
您可以在@vkp的答案中使用查询 –