我有 2 个表:player_positions(记录所有玩家的 gps 坐标)和 players(记录每个玩家的数据)。
玩家
player_id, player_name
球员位置
player_id, player_lat, player_lon, 时间戳
我想获得所有玩家的最后 5 个位置。
我选择一个玩家的最后位置的第一个查询是:
SELECT * FROM player_positions WHERE player_id = 1 ORDER BY timestamp DESC LIMIT 5
但我不知道如何复制此查询以提取所有玩家数据。我相信我必须在之前的连接中进行选择,但不确定如何编写。
谢谢。
最佳答案
您可以像这样模拟在其他数据库中找到的rownumber 函数来解决这个问题。
SELECT
player_id,
player_lat,
player_lon,
`timestamp`
FROM
(SELECT
pp.player_id,
pp.player_lat,
pp.player_lon,
pp.`timestamp`,
@rn := if(@prev = pp.player_id, @rn + 1,1) as rn,
@prev:=pp.player_id
FROM
Player_Positions as pp
JOIN (SELECT @Prev:= Null, @Rn := 0) as v
ORDER BY
pp.player_id,
pp.timestamp desc) as t
WHERE
rn <= 5;
请注意,如果由于某种原因出现并列第 5 名,数据库将任意选择一个。由于玩家不太可能在同一时间戳处于两个位置,因此您应该没问题。
关于mysql - 从连接中选择所有用户的最后 5 个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477973/