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] のセットです:

[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 に答える