从表中选择所有具有相同外键的所有行的id最高的行

时间:2015-11-10 21:50:57

标签: mysql sql

所以我有一个带有author_id外键和已发布状态(bool)的帖子表。

我想为作者选择所有最新(最高ID)发布的帖子(所有具有相同author_id外国ID的帖子)。

现在我可以获得一组外键的最高价

SELECT * FROM Posts WHERE id = (SELECT MAX(id) FROM Posts WHERE  published = 1 AND author_id = 5); 

但是这只返回给定外键的最高id。我如何写这个来返回外键组中id最高的所有帖子?

任何建议表示赞赏。感谢

编辑:如果用sql-server和mysql标记的话。这是mysql。抱歉,

编辑:有人要求澄清 以下是我正在寻找的样本: id body author_id published 1 Top 10... 1 1 2 Breaking... 1 1 3 New Report.. 3 1 4 Can Sunscreen... 3 1 5 Dow down... 2 1 6 Heart Warming... 2 1 7 Next time... 1 1 8 New study... 3 0

所以我想要做的是抓住id 4,6和7的帖子,因为4是作者3的最新(最高id),6是作者2的最新版本,7是最近的作者作者1.我也有条件发表,这就是为什么我们不抓8,因为它是0。

4 Can Sunscreen... 3 1 6 Heart Warming... 2 1 7 Next time... 1 1

已经回答了: 通过添加IN而不是=稍微调整Igor Quirino的答案,我认为以下工作:

SELECT * FROM帖子WHERE id IN(SELECT MAX(id)FROM Posts WHERE published = 1 GROUP BY author_id);

2 个答案:

答案 0 :(得分:3)

你需要这样做:

SELECT * FROM Posts WHERE id IN (SELECT MAX(id) FROM Posts WHERE published = 1 GROUP BY author_id); 

乐意帮助。

答案 1 :(得分:0)

如果您想要作者的最新帖子,请使用ORDER BYLIMIT。例如,要获取作者5的最近10篇帖子:

SELECT p.*
FROM Posts p
WHERE p.author_id = 5
ORDER BY p.id DESC
LIMIT 10;