如何在总和达到某个阈值时返回记录

时间:2009-02-04 20:08:33

标签: sql

我正在使用SQL,我有一个包含三个列的表:account,transaction_date,Points。 每个帐户都有多个transaction_dates和每笔交易获得的积分。

当每个帐户达到某个阈值(即累积100点)时,如何返回transaction_date。假设第一个帐户有2000个交易,前五个帐户有21个交易点。我希望查询返回事务#5,因为这是帐户达到100时。

有人可以帮忙吗? 谢谢! 猫

4 个答案:

答案 0 :(得分:2)

select min(a.transaction_date), a.account from

(select sum(t1.points) as thesum, t2.transaction_date, t2.account 
from table t1
inner join table t2 on t1.account = t2.account and t1.transaction_date <= t2.transaction_date
group by t2.transaction_date, t2.account
having thesum >= 100) a 

group by a.account

答案 1 :(得分:1)

使用三角形连接:

在T-SQL中:

SELECT account, MIN(dt), MIN(points) 
FROM 
(
    SELECT t1.account, t1.date, sum(t2.points) AS points
    FROM table t1
      INNER JOIN table t2 ON t1.account = t2.account AND t1.dt >= t2.dt
    GROUP BY t1.account, t1.date
    HAVING SUM(t2.points) > 100
) iq
GROUP BY account

答案 2 :(得分:0)

这可以让你得到你想要的东西。

SELECT account_id, MIN(transaction_date) FROM table t1 WHERE (SELECT SUM(points) FROM table t2 WHERE t2.transaction_date < t1.transaction_date) <= 100 GROUP BY account_id

答案 3 :(得分:0)

您可以使用存储过程中的游标执行此操作。然后,您可以单步浏览帐户的记录并累积积分。一旦超过阈值,就会返回当前记录。

但是如果您有一个大型数据集,这可能会非常慢,所以如果您知道在运行查询之前所遇到的阈值,您可以添加一个额外的表来标记您跨越阈值的记录之后。更新此额外表可以在事务表的触发器中完成。