【发布时间】:2012-08-16 06:45:19
【问题描述】:
我有一个简单的表,其中包含一些虚拟数据设置,例如:
|id|user|value|
---------------
1 John 2
2 Ted 1
3 John 4
4 Ted 2
我可以通过执行以下 sql(MSSQL 2008) 语句来选择运行总计:
SELECT a.id, a.user, a.value, SUM(b.value) AS total
FROM table a INNER JOIN table b
ON a.id >= b.id
AND a.user = b.user
GROUP BY a.id, a.user, a.value
ORDER BY a.id
这会给我这样的结果:
|id|user|value|total|
---------------------
1 John 2 2
3 John 4 6
2 Ted 1 1
4 Ted 2 3
现在是否可以只检索每个用户的最新行?所以结果是:
|id|user|value|total|
---------------------
3 John 4 6
4 Ted 2 3
我这样做的方式是否正确?任何建议或遵循的新路径都会很棒!
【问题讨论】:
-
您是只对最终结果感兴趣,还是还需要运行总数?您是否已经将运行总数存储在某个地方,还是仅使用它来生成最终结果? [您的最终结果可以更有效地创建,而无需使用运行总计。但是,如果您已经将运行总数存储在某个地方,出于其他原因,它当然可以使用。]
-
您更改了您接受的答案以提高性能,但您没有回复我上面的查询。请注意,您可以通过不使用运行总计方法来提高性能。您是否会对此感兴趣,或者您是否需要以及中的所有结果?
-
嗨,Dems,我忙于工作,错过了您的评论。我只关注总用户和相关用户,所以是的,我对提高性能感兴趣。
标签: sql sql-server-2008 tsql