我有一个简单的表,其中包含一些虚拟数据设置,例如:
|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
我以正确的方式处理这件事吗?任何建议或新的路径都会很棒!
不需要加入,你可以这样加快查询速度:
select id, [user], value, total
from
(
select id, [user], value,
row_number() over (partition by [user] order by id desc) rn,
sum(value) over (partition by [user]) total
from users
) a
where rn = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)