排除具有匹配的较新记录的mysql表记录

排除具有匹配的较新记录的mysql表记录,mysql,Mysql,我有一个查询不同坐标下游戏活动db表的系统。我需要查询某个玩家的活动,但我需要排除在同一坐标上与新条目相匹配的任何活动(无论是否由其他玩家进行,仅此而已) 示例查询是: SELECT * FROM prism_actions WHERE world = 'world' AND (action_type = 'block-place') AND (player = 'viveleroi') AND (x BETWEEN -448.7667627678472 AND -438.76676276784

我有一个查询不同坐标下游戏活动db表的系统。我需要查询某个玩家的活动,但我需要排除在同一坐标上与新条目相匹配的任何活动(无论是否由其他玩家进行,仅此而已)

示例查询是:

SELECT * FROM prism_actions
WHERE world = 'world'
AND (action_type = 'block-place')
AND (player = 'viveleroi')
AND (x BETWEEN -448.7667627678472 AND -438.7667627678472)
AND (y BETWEEN 62.0 AND 72.0)
AND (z BETWEEN -291.17236958025796 AND -281.17236958025796)
ORDER BY x,y,z ASC
LIMIT 0,1000000
我尝试过使用子查询和内部联接来实现它,但就是做不到。我真的需要能够使这个速度以及

本质上,我需要这个查询来排除coords X,Y,Z上的任何记录,当有另一个记录具有相同的X,Y,Z,但具有新的动作时间时


我也考虑过在输入新的匹配项时,在相同的x、y、z处终止记录的方法,但这似乎没有我希望的那么有效。

您可以通过加入一个过滤掉“最新”坐标的子查询来实现这一点:

SELECT prism_actions.*
FROM prism_actions
JOIN (
    SELECT x, y, z, max(action_time) as action_time
    FROM prism_actions
    GROUP BY x, y, z) latest
  ON prism_actions.action_time = latest.action_time
  AND prism_actions.x = latest.x
  AND prism_actions.y = latest.y
  AND prism_actions.z = latest.z
WHERE prism_actions.world = 'world'
AND (prism_actions.action_type = 'block-place')
AND (prism_actions.player = 'viveleroi')
AND (prism_actions.x BETWEEN -448.7667627678472 AND -438.7667627678472)
AND (prism_actions.y BETWEEN 62.0 AND 72.0)
AND (prism_actions.z BETWEEN -291.17236958025796 AND -281.17236958025796)
ORDER BY x,y,z ASC
LIMIT 0,1000000

为什么要把它标记为“java”?此外,此表上是否有主键?根据您的模式定义“较新的条目”。您是否为每个新条目生成一个timestamp/PK?Java只是一个标记,因为我正在运行Java应用程序中的查询,如果可能的话,它可能只允许在mysql之外进行对话。我的表有一个主键,以及为每个记录生成的时间戳(DATETIME)。主键和时间戳字段的名称是什么?我已经用这个解决方案运行了测试,它似乎工作得很好。谢谢