[英]SQL: select rows where sum of a column satisfies a condition
在[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
使用運行總計可以解決該問題,但是主要問題是我要避免先計算所有集合的運行總計,然后再找到符合條件的點,原因是該表包含的數量超過100.000。 000行,並且與[price]的總和相比,給定的數字通常很小(例如:1250.14),並且預期結果幾乎不豐富100-150行!
還有其他方法可以計算並獲得所需的行,而不會打擾那些100.000.000行嗎?
請嘗試使用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
您不會相信這一點,但是隨着所涉及的行數的增加(例如,較大的運行總閾值),按FAR解決此問題的最有效方法是使用游標! 對真的! 在這里查看 。 順便說一句,遞歸CTE方法可能會遇到遞歸級別限制(如堆棧溢出)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.