一尘不染

获取SQL表列的总和,直到总和达到5000

sql

我工作的一个SQL查询的表有两列Amount,并Date应返回的总和Amount列的值,直到达到5000它也应该返回的值Date列在该Sum(Amount)河段5000的排序条件为Date

例如,我的数据如下 SQL TABLE

   ID Amount  Date
    1 1000    5/5/2014
    2 1000    5/1/2014
    3 900     5/3/2014
    4 1500    5/4/2014
    5 2000    5/4/2014 
    6 2500    5/5/2014

在上表中,金额总计应在按日期排序之后进行计算,并且一旦金额达到5000分,应返回金额及其关联的日期的总计。

排序数据后,它变成如下所示

   ID Amount  Date    
    2 1000    5/1/2014
    3 900     5/3/2014
    4 1500    5/4/2014
    5 2000    5/4/2014 
    1 1000    5/5/2014
    6 2500    5/5/2014

查询应返回以下结果

TotalAmount  Date
5400         5/4/2014

上述结果是因为总和达到5000ID=5 Amount=200 and Date=5/4/2014

我可以知道一种更好的方法来处理它吗 SQL Server


阅读 165

收藏
2021-03-08

共1个答案

一尘不染

对于SQL Server,您可以使用SUM() OVER()并获得总和> = 5000的第一行;

WITH cte AS (
  SELECT id, date, SUM(amount) OVER (ORDER BY date,id) totalamount 
  FROM mytable
)
SELECT TOP 1 totalamount, date 
FROM cte 
WHERE totalamount >= 5000 
ORDER BY date, id;

要使用进行测试的SQLfiddle

2021-03-08