小编典典

如何一次选择获取每个类别的最新2个项目(使用mysql)

mysql

我的数据如下所示:

id |类别|插入日期|标题...。
--------------------------------
1 | 1 | 123 |测试1
2 | 1 | 124 |测试2
3 | 1 | 125 |测试3
4 | 2 | 102 |测试4
5 | 2 | 103 |测试5
6 | 2 | 104 |测试6

我要完成的工作是按类别获取最新的2个条目(按insertdate DESC的顺序排列),因此结果应为:

id | ....
----
3 |...。
2 | ....
6 |...。
5 | ....

使用获取最新消息group by很容易,但是如何在不启动多个查询的情况下获取最新2?

感谢您的帮助;-)
S.


阅读 272

收藏
2020-05-17

共1个答案

小编典典

在这里,你哥们!

SET @counter = 0;
SET @category = '';

SELECT
    *
FROM
(
    SELECT
        @counter := IF(data.category = @category, @counter+1, 0) AS counter,
        @category := data.category,
        data.*
    FROM
    (
        SELECT
            *
        FROM test
        ORDER BY category, date DESC
    ) data
) data
HAVING counter < 2
2020-05-17