假设我有一个数据表,如下所示:
ItemNo | ItemCount | Proportion
------------------------------------------
1 3 0.15
2 2 0.10
3 3 0.15
4 0 0.00
5 2 0.10
6 1 0.05
7 5 0.25
8 4 0.20
换句话说,总共有20个项目,每个ItemNo
的累计比例总和为100%。表行的顺序在这里很重要。
是否可以执行SQL查询 没有循环或游标 以返回超出累积比例的第一个 ItemNo
?
换句话说,如果我要检查的'比例'是35%,那么超过该比例的第一行是ItemNo 3
,因为0.15 + 0.10 + 0.15 = 0.40
同样,如果我想找到超过75%的第一行,那将是ItemNo 7
,因为直到该行的所有Proportion
的总和小于0.75。
答案 0 :(得分:5)
select top 1
t1.ItemNo
from
MyTable t1
where
((select sum(t2.Proportion) from MyTable t2 where t2.ItemNo <= t1.ItemNo) >= 0.35)
order by
t1.ItemNo
答案 1 :(得分:3)
窗口函数的经典之作:
SELECT *
FROM (
SELECT ItemNo
,ItemCount
,sum(Proportion) OVER (ORDER BY ItemNo) AS running_sum
FROM tbl) y
WHERE running_sum > 0.35
LIMIT 1;
适用于 PostgreSQL 等。
或者,在 tSQL 表示法中(您似乎使用):
SELECT TOP 1 *
FROM(
SELECT ItemNo
,ItemCount中
,sum(比例)OVER(ORDER BY ItemNo)AS running_sum
从tbl)y
WHERE running_sum&gt; 0.35; 击>
在tSQL中不起作用,如下所示。