我试图用下面的代码来做这件事,通过左连接获得所有关键字的位置,它工作得很好,但它显示了每个关键字的第一个位置,但我想显示记录的最后一个位置(按日期)。
SELECT keyword.id, keyword.title, keyword.date, rank.position FROM keyword
LEFT JOIN rank
ON rank.wordid = keyword.id
GROUP BY keyword.id
ORDER BY keyword.date DESC
我该怎么做呢?我应该使用子查询还是什么?有没有办法在不使用子查询的情况下做到这一点?
我想要的:
得到17而不是13,我的意思是最后的位置记录。
发布于 2018-06-25 03:36:16
不要使用group by
来解决这个问题!您想要过滤,所以使用where
子句。在这种情况下,使用相关子查询效果很好:
SELECT k.id, k.title, k.date, r.position
FROM keyword k LEFT JOIN
rank r
ON r.wordid = k.id AND
r.date = (SELECT MAX(r2.date)
FROM rank r2
WHERE r2.wordid = k.id
)
ORDER BY k.date DESC
发布于 2018-06-25 14:59:52
您可以使用下面的查询
SELECT keyword.id, keyword.title, keyword.date, rankNew.position FROM keyword LEFT JOIN (
SELECT rank.wordid, rank.position FROM rank ORDER BY rank.id DESC LIMIT 0, 1) AS rankNew ON (rankNew.wordid = keyword.id);
您可以从Retrieving the last record in each group - MySQL获得更多参考资料
https://stackoverflow.com/questions/51013235
复制相似问题