“变量”,在SQL Server的累积值

问题描述:

我有一个表,看起来像这样:“变量”,在SQL Server的累积值

id count price 
1 100  2 
2 50  3 
3 10  4 

我想要得到某些累计计数值的价格,例如: 当我“需要”的计数为120,SQL累积前x行,并检查第x行中的累积值是否满足要求(> 120),然后将第x行的价格值返回给我。

120我想拿到3的价格,为159.5然后4,80 2等

这有可能在SQL Server?

+1

“当我查询120”是什么意思? –

+0

您希望价格与您的“变量”最接近的价值(或价值总和)相对应吗? (这甚至很难问一个关于...的问题) –

+0

我更新了我的帖子,抱歉,如果不清楚,我希望现在好一点。 –

想你想要这样的:

select top 1 
     [price] 
from(
select [id], 
     [count], 
     [price], 
     sum([count]) over(order by [id]) as run_sum 
from tbl 
) x 
where 120 <= run_sum 
order by run_sum 

小提琴:http://www.sqlfiddle.com/#!6/a1976/5/0

为159.5小提琴例如,80 http://www.sqlfiddle.com/#!6/a1976/6/0

小提琴例如,http://www.sqlfiddle.com/#!6/a1976/7/0

+0

谢谢,它的工作原理!我认为你的查询比下面的查询更快? (我想在短时间内查询它几千次) –

+1

Np,由于分析函数只有一次访问表(因为没有连接回同一个表),所以它应该快一点 –

select top 1 price from 
(
    select t1.id, t1.count, SUM(t2.count) as sum, t1.price 
    from table_name t1 
    inner join table_name t2 on t1.id >= t2.id 
    group by t1.id, t1.count, t1.price 
) t where t.sum >= 120 order by sum 

fiddle