Mysql 当有两个最大值(XXX)时,SQL仅选择一行

Mysql 当有两个最大值(XXX)时,SQL仅选择一行,mysql,duplicates,max,Mysql,Duplicates,Max,我有一个“游戏”表,其中包含ID、名称、分数和时间列。表中总共有10行,用于存储游戏的前10条记录。我的程序是,当用户能够进入前10名时,将删除具有maxtime的行: delete from game where time = (select x.del_time from (select max(time) as del_time from game) x)" 但是,当有多行具有相同的maxtime时,它将同时删除这两行。所以我的问题是如何只删除一行?就像如果最大时间相同,则获取最大分

我有一个“游戏”表,其中包含ID、名称、分数和时间列。表中总共有10行,用于存储游戏的前10条记录。我的程序是,当用户能够进入前10名时,将删除具有maxtime的行:

delete from game  where time =  (select x.del_time from (select max(time) as del_time from game) x)"
但是,当有多行具有相同的maxtime时,它将同时删除这两行。所以我的问题是如何只删除一行?就像如果最大时间相同,则获取最大分数,如果最大分数也相同,则获取最大ID,因为ID是自动递增的,它将不相同。谢谢

您必须按ID删除:

delete from game  where time =  (select x.del_time from (select max(time) as del_time from game LIMIT 1) x)"
上述查询将从具有最大时间值的记录中删除。如果有多个这样的行,那么它将选择具有最大得分值的行。如果比分持平,它将选择id值最大的一个


只需在查询结束时使用limit 1或按id删除即可。

尝试在查询结束时使用limit 1。因此,请注意,您的原始查询可以使用一个子查询完成,且无别名,这将使它更简单:从游戏中删除,其中时间=从游戏中选择maxtime。@EdGibbs它显示错误1093-无论如何,您不能在from子句中为更新指定目标表“游戏”,谢谢@liding它工作了!谢谢抱歉,Tony-我忘了MySQL不喜欢它正在删除的表的直接子查询。您对select maxtime的限制为1。。。查询,它只返回一行开头。应将限制1放在末尾。从游戏中删除,其中时间=从游戏中选择x.del_时间从游戏中选择maxtime作为del_时间xLIMIT 1
DELETE FROM game
WHERE id = (SELECT id 
            FROM (
              SELECT id 
              FROM game
              WHERE `time` = (SELECT MAX(`time`) FROM game)
              ORDER BY score DESC, id DESC
              LIMIT 1) AS x)
delete from game  where time =  (select x.del_time from (select max(time) as del_time from game LIMIT 1) x) "