sql - 如何在 SQL 中查询到特定值的累积总和

标签 sql while-loop

我有一个看起来像这样的 SQL 表:

Id  Quantity
1   24.857    
2   24.84
3   24.881
4   24.823

我需要选择数量的累积总和,直到达到指定的值 - 比如说 50。
因此,对于上表,我需要查询返回前 3 行。 (前两行的数量总和没有达到50,所以我还需要第三行)。

现在我有下面的代码,它很接近但不太正确。此查询的结果仅返回表的前两行,这是不够的。
DECLARE @point INT = 50;

WITH x(Id, Quantity, RowNum, TotalQuantity) AS
(
  SELECT
    id, quantity, ROW_NUMBER() OVER (ORDER BY id),
    SUM(quantity) OVER (ORDER BY id RANGE UNBOUNDED PRECEDING)
  FROM inventory
)

SELECT x.Id, x.RowNum, x.Quantity, x.TotalQuantity
FROM x
WHERE x.TotalQuantity <= @point
ORDER BY x.Id

此查询的结果如下:
Id  RowNum  Quantity   TotalQuantity
1   1       24.857     24.857
2   2       24.84      49.697

我觉得我需要一个 WHILE在这里循环,我试图无济于事。

非常感谢任何帮助,谢谢。

最佳答案

当总量>=@point 时,您可以再使用一个 cte 来获得第一行。然后加入现有的 cte。

WITH x(Id, Quantity, RowNum, TotalQuantity) AS
(
  SELECT
    id, quantity, ROW_NUMBER() OVER (ORDER BY id),
    SUM(quantity) OVER (ORDER BY id RANGE UNBOUNDED PRECEDING)
  FROM inventory
)
, y as (select min(rownum) as minrownum from x where totalquantity >= @point)
SELECT x.Id, x.RowNum, x.Quantity, x.TotalQuantity
FROM x
JOIN y on x.rownum <= y.minrownum
ORDER BY x.Id

关于sql - 如何在 SQL 中查询到特定值的累积总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36134742/

相关文章:

java - 生成 TEXT 列而不是 VARCHAR

sql - 索引 bool 字段

mysql - SQL 日期范围 - 如果没有提供起点则选择全部?

c++ - 需要了解 while 循环条件(见评论)

c++ - 程序只从偶数输出中减1

python - 输入一个数字N,然后程序继续输出所有小于N的2的幂。我该怎么继续?

java - Spring 中的事务原子性

sql - 在第一个最高分之后找到最低分

c - 一个整数不等于另一个整数?

java - Printf 问题还是程序问题?