“变量”,在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?
答
想你想要这样的:
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
+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
“当我查询120”是什么意思? –
您希望价格与您的“变量”最接近的价值(或价值总和)相对应吗? (这甚至很难问一个关于...的问题) –
我更新了我的帖子,抱歉,如果不清楚,我希望现在好一点。 –