在下表中记录玩家信息(玩家信息)。检查每个玩家的最高级别(玩家ID)和该级别下的最小差距。
player_id level gap
-----------------------
123 8 20
123 9 40
123 9 30
246 [NULL] 10
246 6 30
246 6 20
-----------------------
在Postgres中,您将使用distinct on
:
select distinct on (player_id), t.*
from t
order by player_id, level desc, gap;
在MySQL或Postgres中,您可以执行:
select t.*
from (select t.*,
row_number(player_id) order by (level desc, gap) as seqnum
from t
) t
where seqnum = 1;
这里查询,您可以为此使用min()
和max()
函数。
select min(t1.gap), t2.lev, t1.player_id
from tableA t1
inner join
(select max(lev) lev, player_id
from tableA
group by player_id) t2 on t2.lev=t1.lev and t1.player_id = t2.player_id
group by t1.player_id, t2.lev
请参见dbfiddle。