2017-01-11 38 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

非常感谢。 –