Sql server 2005 sql server 2005中计算运行总操作的更好性能

Sql server 2005 sql server 2005中计算运行总操作的更好性能,sql-server-2005,select,Sql Server 2005,Select,我问了这个问题,细节是 在sql中,我有如下表数据 id type amount 1 type1 2000 2 type1 1000 3 type2 500 4 type3 3000 5 type1 2000 6 type2 500 7 type3 50

我问了这个问题,细节是

在sql中,我有如下表数据

id      type     amount       
1      type1       2000    
2      type1       1000     
3      type2        500    
4      type3       3000    
5      type1       2000   
6      type2        500        
7      type3       5000    
8      type1       1000    
我想在下面的select语句中获取数据

id      type     amount      current   
1      type1       2000         2000                
2      type1       1000         1000                 
3      type2        500          500                 
4      type3       3000         3000                 
5      type1       2000         3000                  
6      type2       -500            0                 
7      type3       5000         2000
8      type1      -1000         4000 
等等 这意味着每种类型都必须有基于金额类型的当前总金额 而且它需要是不具有while循环的,因为执行它需要很长时间

for eg:

in type 1

ID      Amount      current 
1      2000-add       2000                   
2      1000-sub       1000                  
3      2000-add       3000                   
4      1000-add       4000                   
答案是,

SELECT id,
       type,
       amount,
       (SELECT sum(amount)
        FROM   mytable t1
        WHERE  t1.type = t2.type
               AND t1.id <= t2.id) currenttotal
FROM   mytable t2 
执行我根据上述问题的答案(有两个答案,两个答案的执行时间相同)编写的select语句需要
00:00:02
时间。如何减少执行时间?

试试看

CREATE UNIQUE INDEX IX ON YourTable(type,id) INCLUDE (amount)
只要每个
类型的行数不太大,问题中的查询就可以了

SQL Server 2012比以前的版本更好地支持计算运行总计。在SQL Server 2012中,您可以

SELECT id,
       type,
       amount,
      SUM(amount) OVER (PARTITION BY type 
                         ORDER BY id ROWS UNBOUNDED PRECEDING) currenttotal
FROM   mytable t2 

如何缩短执行时间?您有支持查询的索引吗?我假设您至少看过执行计划。请添加更多详细信息。该查询的适当索引位于
type,id INCLUDE(amount)
但是,如果每个
类型有很多行,性能仍然会很差。即使添加了问题链接,也要向下投票……这将解释所有@namphian问题都应该是自包含的。我也觉得很烦人,我不得不先访问其他页面,甚至知道你的问题是什么。请解释更多,并用我提供的上述数据举例。。。please@Suresh-我的建议是在表上创建索引。我不能给你举个例子。我的答案中的第一行代码是完成此操作的完整语法。创建索引有望意味着您现有的查询将在可接受的时间内工作。
无限制的前一项
意味着?@Suresh-该查询在SQL Server 2005中不起作用我只是提供了它,以防移动到SQL Server 2012是一个选项。它本质上意味着用
类型
将所有行从第一行(
前面的无界
)加总到当前行。我不能仅用一个编码就改变我的整个项目,你也明白我的意思……sql server 2005中的任何选项请告诉我。。。。
SELECT id,
       type,
       amount,
      SUM(amount) OVER (PARTITION BY type 
                         ORDER BY id ROWS UNBOUNDED PRECEDING) currenttotal
FROM   mytable t2