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

时间:2013-01-01 21:35:52

标签: mysql

我有一个系统,可以在各种坐标处查询游戏活动的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

我已经尝试使用子查询和内连接,但却无法得到它。我真的需要能够迅速做到这一点。

基本上我需要这个查询来排除坐标X,Y,Z处的任何记录,当有另一条记录具有相同的X,Y,Z但是有一个新的action_time时。

我还考虑了在输入新匹配时在同一个x,y,z过期记录的某种方法,但这似乎并不像我想的那样高效。

1 个答案:

答案 0 :(得分:0)

您可以通过加入筛选出“最新”坐标的子查询来完成此操作:

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
相关问题