mysql - 从连接中选择所有用户的最后 5 个位置

标签 mysql

我有 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/

相关文章:

mysql - SQL 查询 WHERE 子句包含多行条目

mysql - 对于该服务器版本,其显示在此位置无效

MySQL:将数据从 TableA:FieldA 复制到 TableB:FieldB 匹配公共(public) UID 字段

mysql - 当 ON 语句为 false 时表连接是否有效?

php - 搜索多个表php activerecord

php - 更新没有唯一键的行

C++ mysql存储过程错误代码1327

mysql - 如何使用mysql将列NULL值从 Angular 传递到 Node

MySQL - 为什么我的 innodb_force_recovery 显示为 "unknown variable"

javascript - FullCalendar 在设定的时间内每周重复 mysql 事件