2017-01-11 55 views
1

請幫我牛逼進行以下選擇查詢SQL選擇基於界限上排

源表

name Amount 
----------- 
A 2  
B 3  
C 2 
D 7 

如果限制爲5,然後導致表應該是

name Amount 
----------- 
A 2  
B 3 

如果限8然後結果表

name Amount 
----------- 
A 2  
B 3  
C 2 
+0

的SQL Server版本使用的是 –

+0

爲什麼* C *排除在外,如果限制爲5? – Stephen

+0

您的限額是基於金額總額而非記錄數量? –

回答

4

您可以使用窗口函數來實現這一目標:

select name, 
    amount 
from (
    select t.*, 
     sum(amount) over (
      order by name 
      ) s 
    from your_table t 
    ) t 
where s <= 8; 

的解析函數sum將彙總行由行基於給定的順序order by name上。

一旦您找到了使用它的總和,直到給定的行,您可以使用簡單的where子句過濾結果以查找行,直到數量總和低於或等於給定的限制。


更多關於這個話題:

+2

如果你也解釋了爲什麼這個工程會給出額外的分數 –

+1

@JonathanPorter更新了一些解釋。 – GurV

+0

非常感謝。 –