【发布时间】:2016-03-16 23:27:28
【问题描述】:
假设我有下表
CREATE TABLE #tblUsersPokemons (
RecordId int NOT NULL,
PokemonId int NOT NULL,
PokemonExp int NOT NULL,
PokemonLevel int NOT NULL,
UserId int NOT NULL
)
现在下面的查询可以正常工作了
select
SUM(cast(PokemonExp as bigint)) as TotalExp,
MAX(PokemonLevel) as MaxPokeLevel,
Count(PokemonId) as TotalPoke,
UserId
from #tblUsersPokemons
group by UserId
这里是此类查询的示例结果
ToplamExp MaxPokeLevel TotalPoke UserId
----------- --------------- ----------- --------
29372294 101 4 1
1134696 98 1 2
1400 98 1 101
24534365 98 4 102
1400 98 1 1102
1400 98 1 1103
1400 98 1 2102
1400 98 1 2103
789220 98 7 2105
1468 98 1 3104
现在我的问题来了
我想限制计数的 PokemonId。我的意思是我想选择最多 6 个相同的 PokemonId 记录。从这些记录中,PokemonExp 排序的前 6 名应该被计算在内。
例如用户有以下记录
从这个表中查询应该采用记录 id : 1,2,3,4,5,6,9 而不是 7,8,因为 PokemonId 1 的前 6 条记录被采用
【问题讨论】:
标签: sql sql-server tsql sql-server-2014