Sql 仅获取要显示的最新/最新记录
好的,我有一个列显示级别,还有一个列显示在特定级别停止游戏的玩家 现在一个玩到5级的玩家也会被列入4级、3级、2级和1级。这正是我不想要的。 如果一个玩家已经玩到了5级,我希望他只算在5级的那一排,以此类推 怎么做 例如,我得到的是:Sql 仅获取要显示的最新/最新记录,sql,window-functions,Sql,Window Functions,好的,我有一个列显示级别,还有一个列显示在特定级别停止游戏的玩家 现在一个玩到5级的玩家也会被列入4级、3级、2级和1级。这正是我不想要的。 如果一个玩家已经玩到了5级,我希望他只算在5级的那一排,以此类推 怎么做 例如,我得到的是: level stopped_playing 101 2632 102 1206 103 970 104 920 这就是我想要的: level stopped_playing 101 1426 102 236 1
level stopped_playing
101 2632
102 1206
103 970
104 920
这就是我想要的:
level stopped_playing
101 1426
102 236
103 50
104 920
920名玩家达到104级(当然是101级)并停在那里,1426名玩家只玩101级并已经停在那里。
但是在结果中,我得到了达到4级的920也被计算在101级行上
如何避免这种情况?这样做(根据实际表格进行调整):
注意:将来列出您的表及其结构会很有帮助。另外,最好提及您正在使用的SQL的品牌,因为它们都有不同的功能。考虑到您的表结构,将给出一个粗略的想法
Select Level, count(*)
from (select player, max(Level) as 'Level'
from table group by player) group by Level;
希望这对您有所帮助您没有提到您的RDBMS。使用PostgreSQL、ORACLE、DB2、SQL Server 2012、Teradata、Sybase和Vertica中存在的窗口函数可以轻松解决这个问题 以下查询在PostgreSQL上测试(也在上测试):
选择*,
停止播放-滞后(停止播放,1,0)
需要超过(按级别说明订购)
从选项卡
逐级排序;
这是一个很好的窗口功能应用程序。假设最大级别是最高值,请尝试以下操作:
select maxlevel, COUNT(*) as Stopped_Playing
from (select t.*,
MAX(level) over (partition by playerid) as maxlevel
from t
) t
group by maxlevel
order by maxlevel
Pl发布您的表结构您使用的是哪种DBMS?神谕Postgres?窗口函数在DB2、SQL Server 2012、Teradata、Sybase和Vertica上也可用。@a_horse_,没有名字,谢谢,我对ORACLE和Postgres很确定,所以我已经提到了它们。更新了我的答案。
select maxlevel, COUNT(*) as Stopped_Playing
from (select t.*,
MAX(level) over (partition by playerid) as maxlevel
from t
) t
group by maxlevel
order by maxlevel