我工作的一个SQL查询的表有两列Amount,并Date应返回的总和Amount列的值,直到达到5000它也应该返回的值Date列在该Sum(Amount)河段5000的排序条件为Date
Amount
Date
5000
Sum(Amount)
例如,我的数据如下 SQL TABLE
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
上述结果是因为总和达到5000在ID=5 Amount=200 and Date=5/4/2014
ID=5 Amount=200 and Date=5/4/2014
我可以知道一种更好的方法来处理它吗 SQL Server
SQL Server
对于SQL Server,您可以使用SUM() OVER()并获得总和> = 5000的第一行;
SUM() OVER()
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。