Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅获取要显示的最新/最新记录_Sql_Window Functions - Fatal编程技术网

Sql 仅获取要显示的最新/最新记录

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

好的,我有一个列显示级别,还有一个列显示在特定级别停止游戏的玩家

现在一个玩到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
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