0

在 [mytable] 上:

[id] AS INT -- UNIQUE
[price] AS MONEY

在按 [id] 排序的集合上,我需要选择 [price] 的总和满足某些条件的那些 [id]

例如:

[id]    [price]
   1       2.0
   2       4.7
   3       3.2
   4       2.8
   5       6.2
   6       1.5
   7       4.2
   8       3.3

对于给定的数字“10.0”:

[id]  [price] [r_total]
   1     2.0        2.0
   2     4.7        6.7
   3     3.2        9.9
   4     2.8       12.7 <-- here the criteria meets for 10.0
   5     6.2       18.9
   6     1.5       20.4
   7     4.2       24.6
   8     3.3       27.9

期望的结果是一组 [id]s :

[id]
   1
   2
   3
   4

使用 Running Total 解决了问题,但主要问题是我想避免先计算所有集合的运行总计,然后找到条件满足的点,原因是表包含超过 100.000。 000 行,并且给定的数字与 [price] 的总和相比通常非常小(例如: 1250.14 ),预期结果勉强丰富 100-150 行!

有没有其他方法可以计算并获得所需的行而不干扰那些 100.000.000 行?

4

2 回答 2

3

请尝试使用 CTE:

;with  CTE1 as 
(
    SELECT 
        ID, Price, Price as CUM_SUM 
    FROM YourTable 
    WHERE ID=1

    UNION ALL

    SELECT 
        c.ID, c.Price, c.Price+c1.CUM_SUM as CUM_SUM 
    FROM CTE1 c1 INNER JOIN 
        YourTable c on c.ID=c1.ID+1
    WHERE 10 >c1.CUM_SUM
)
select * from CTE1
于 2013-02-14T07:54:10.877 回答
1

你不会相信这一点,但是随着所涉及的行数的增长(例如,一个大的运行总阈值),到目前为止,解决这个问题的最有效方法是使用CURSOR! 对真的! 在这里查看。顺便说一句,递归 CTE 方法可能会遇到递归级别限制(如堆栈溢出)。

于 2013-02-14T21:24:09.653 回答