0

我有一个博客,多个作者可以发帖。在首页上,我想显示最近 X 个帖子的轮播 - 假设是 5 个。但是,我想过滤掉作者重复。因此,如果一位作者在这 5 篇文章中有多个帖子,则只有最近的一篇会进入,其他的会被过滤掉。另外,我想选择整行,而不仅仅是 ID。这里有一个例子:

数据

ID | Title   | AuthorID | Date
1  | "Now"   | 6        | 2013-03-27
2  | "this"  | 5        | 2013-03-26
3  | "is"    | 4        | 2013-03-27
4  | "the"   | 2        | 2013-03-28
5  | "story" | 2        | 2013-03-29
6  | "all"   | 4        | 2013-04-01
7  | "about" | 2        | 2013-04-02
8  | "how"   | 3        | 2013-04-03
9  | "My"    | 1        | 2013-04-04
10 | "life"  | 1        | 2013-04-05

期望的结果

ID | Title   | AuthorID | Date
10 | "life"  | 1        | 2013-04-05
8  | "how"   | 3        | 2013-04-03
7  | "about" | 2        | 2013-04-02
6  | "all"   | 4        | 2013-04-01
2  | "this"  | 5        | 2013-03-26

我目前使用以下内容:

SELECT * FROM posts
ORDER BY date DESC
LIMIT 5

但是,这当然让我得到以下结果

ID | Title   | AuthorID | Date
10 | "life"  | 1        | 2013-04-05
9  | "My"    | 1        | 2013-04-04
8  | "how"   | 3        | 2013-04-03
7  | "about" | 2        | 2013-04-02
6  | "all"   | 4        | 2013-04-01

我想消除重复。如何?

我看到有一个 DISTINCT 子句,但这只会选择作者 ID,我想选择整行。

4

2 回答 2

1

这个技巧/黑客会起作用,但可能需要一些时间来生成结果(在有 1,00,000 行的表上花了我 3.713 秒):

SELECT *
FROM (SELECT * 
    FROM posts
    ORDER BY date DESC ) d
GROUP BY d.`AuthorID`
LIMIT 5;
于 2013-04-05T19:50:05.203 回答
0

我想这就是你要找的:

SELECT *
FROM (SELECT *
      FROM posts
      ORDER BY Date DESC) p
GROUP BY p.AuthorID
ORDER BY Date DESC
LIMIT 5;

SQL小提琴

于 2013-04-05T20:09:59.793 回答