我有一个高分表,用来存储分数和日期的列表。我想找到所有在前十名中没有超过一个月的分数。我有以下查询,这是我想要的部分内容:
SELECT userId FROM highscores
WHERE DATEDIFF(FROM_UNIXTIME(date),
DATE_SUB(CurDate(), INTERVAL 1 MONTH)) < 0
ORDER BY score DESC LIMIT 10,18446744073709551615它所做的:
找到至少一个月前提交的所有分数,而不是的前10名,也就是的旧分数。
我想做的是:
查找至少一个月前提交的所有分数,这些分数不在的前10名,所有分数都是
这很简单吗?
编辑:我使用的MySQL版本不支持它的子查询。当我尝试时,我会收到以下错误:
#1235 -这个版本的MySQL还不支持“限制&IN/ALL/ANY/ of”
编辑2:实际上,我想从表中删除这些分数,我只是使用SELECT语句,因为我认为将select转换为delete很简单,但我不太熟悉子查询、加入同一个表并从中删除。
发布于 2011-07-19 16:47:05
分头行动。首先,进行一个查询,使您获得前10项:
SELECT id FROM entries ORDER BY score DESC LIMIT 10然后编写一个查询,为您提供一个月以上的所有内容:
SELECT * FROM entries WHERE DATEDIFF(FROM_UNIXTIME(date), DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) < 0现在将这些合并为一个:
SELECT * FROM entries WHERE DATEDIFF(FROM_UNIXTIME(date), DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) < 0 AND NOT id IN (SELECT id FROM entries ORDER BY score DESC LIMIT 10)这应该能起作用。
https://stackoverflow.com/questions/6750763
复制相似问题