簡體   English   中英

SQL:選擇滿足列條件的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM