这是此帖子的一个说明:
SQL select only rows with max value on a column
在接受的答案中,嵌套查询是用于最大计算的查询,而外部查询则加入该查询。我试图颠倒顺序,但遇到语法错误。
查询:
(SELECT id, MAX(rev) mrev
FROM docs
GROUP BY id) b
join (select id, rev, content from docs) d
on b.id = d.id and d.rev = b.rev
我遇到的错误是:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本以使用正确的语法 靠近'b加入(从文档中选择id,rev,文档中的内容)d在b.id = d.id上, d.rev = b.rev',位于第3行
这里的订单重要吗?
答案 0 :(得分:1)
您可以这样编写该查询。
SELECT d.*
FROM
(
SELECT id, MAX(rev) AS maxrev
FROM docs
GROUP BY id
) b
JOIN docs AS d
ON (b.id = d.id AND d.rev = b.maxrev)
注意如何从子查询中选择最大转速。而子查询只是简单地联接到表中。
另一种编写方式:
select d.*
from docs d
join (
select id, max(rev) maxrev
from docs
group by id
) b
on b.id = d.id and b.maxrev = d.rev
或者,如果您敢使用EXISTS:
SELECT *
FROM docs AS d
WHERE EXISTS (
SELECT 1
FROM docs AS b
WHERE b.id = d.id
GROUP BY b.id
HAVING d.rev = MAX(b.rev)
);