我需要找到达到给定值所需的记录数。我有一个以下格式的表格:
ID Name Time Time 2
1 Campaign 1 7 100
2 Campaign 3 5 165
3 Campaign 1 3 321
4 Campaign 2 610 952
5 Campaign 2 15 13
6 Campaign 2 310 5
7 Campaign 3 0 3
8 Campaign 1 0 610
9 Campaign 1 1 15
10 Campaign 1 54 310
11 Campaign 3 4 0
12 Campaign 2 23 0
13 Campaign 2 8 1
14 Campaign 3 23 1
15 Campaign 3 7 0
16 Campaign 3 5 5
17 Campaign 3 2 66
18 Campaign 3 100 7
19 Campaign 1 165 3
20 Campaign 1 321 13
21 Campaign 1 952 5
22 Campaign 1 13 3
23 Campaign 2 15 610
24 Campaign 2 0 15
25 Campaign 1 100 310
26 Campaign 2 165 0
27 Campaign 3 321 0
28 Campaign 3 952 1
29 Campaign 3 0 1
30 Campaign 3 5 0
我想知道在Time1 + Time2总数等于或大于给定数字之前,有多少“广告系列1”条目。
例如,广告系列1达到1400的结果应为5。
如果我没有足够清楚地解释这一点,我会道歉 - 这个概念目前仍然有点混乱。
由于
答案 0 :(得分:0)
在SQL Server 2012中,您可以使用以下命令获取行:
select t.*
from (select t.*, sum(time1 + time2) over (partition by name order by id) as cumsum
from table t
) t
where cumsum >= @VALUE and (cumsum - (time1 + time2)) < @VALUE;
您可以使用以下方式获取计数:
select name, count(*)
from (select t.*, sum(time1 + time2) over (partition by name order by id) as cumsum
from table t
) t
where (cumsum - (time1 + time2)) < @VALUE
group by name;
如果您不使用SQL Server 2012,则可以使用相关子查询执行累积求和:
select name, count(*)
from (select t.*,
(select sum(time1 + time2)
from table t2
where t2.name = t.name and
t2.id <= t.id
) as cumsum
from table t
) t
where (cumsum - (time1 + time2)) < @VALUE
group by name;
答案 1 :(得分:0)
计算运行总计的递归CTE应该有效:
;WITH CTE AS
(
SELECT id,
name,
SUM([time]+[time 2])
OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS RunningTotal
FROM Table1
WHERE name = 'Campaign 1'
)
SELECT count(*)+1 AS [Count]
FROM CTE
WHERE RunningTotal < 1400
请注意,我在计数中添加了1,因为查询计算了达到但不包括1400所需的行数。逻辑指示下一行将值推到1400以上。