另一種選擇。
使用內部子查詢來獲取唯一的時間戳(如果您有一個這樣的表,它可能會更有效率,因爲它可以有效地使用索引)。它被連接到表格以獲得當天或之前的所有行,並且使用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的答案中使用查詢 –