1

我有一张桌子

create table emp 
(
    id,  int,
    salary int
)

我需要按 id 返回滚动总和小于给定输入 X 顺序的所有行。

我想到的查询是:

Select * 
From 
    (select id, salary, sum(salary) over (order by id ASC) as rollingSum 
     from emp) as temp_view 
where rollingSum < X

它能够正确地提供我需要的东西。

但是即使达到了总和,子查询也会进行滚动求和直到结束。直到结束的所有行都将被搜索。

有没有一种方法可以在达到总和后立即停止滚动总和?

4

1 回答 1

0

由于您声明中的顺序,我有理由相信这是不可能的。在您搜索完所有条目之前,无法知道排名靠前的条目是什么。如果该列上有索引,则可能不需要搜索所有索引。不过,此时,您不希望中断从该表中的单个连续读取以进行逐行处理。虽然 SQL Server 中有很多功能,所以我完全有可能遗漏了一些东西。

如果将滚动总和结果保存在列中,您也可以做一些事情,但我猜您想停止处理以节省性能成本,而该解决方案可能无济于事。如果数据每月只更改一次,并且选择每月运行 100 次,那么前期成本可能会变得物有所值。

于 2019-08-22T17:07:22.037 回答