sql - MySQL中如何为每个topic_id选择最后两条记录

标签 sql mysql

我必须为每个主题选择最后两条记录。

例如: 表:消息

id  |  topic_id
------------
 1  |  1
 2  |  1
 3  |  1
 4  |  1
 5  |  2
 6  |  2
 7  |  2
 8  |  3
 9  |  3
10  |  3

我想获取这些行:

 3 1
 4 1
 6 2
 7 2
 9 3
10 3

我该怎么做?

最佳答案

SELECT max(id), max(topic_id) FROM msg
GROUP BY topic_id

UNION

SELECT max(id), max(topic_id) FROM msg
WHERE id not in (
    SELECT max(id) as id FROM msg
    GROUP BY topic_id)
GROUP BY topic_id

关于sql - MySQL中如何为每个topic_id选择最后两条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596489/

相关文章:

python - 使用类似 SQL 的 IN 子句过滤 Pyspark DataFrame

sql - 尝试对不同的值求和 SQL

mysql - 给定行的所有列的平均值(没有明确写入列名)?数据库

sql - MS Access SQL, "function calls"

sql查询两次返回相同的值

sql - 在没有足够数据可用的情况下,使用带有前导空值的 SQL 窗口函数计算移动平均值

mysql - 如何改进 MySQL REGEXP 搜索?

mysql - 选择需要 8 秒。改进想法

mysql - 运行 MySQL 循环时出错

php - 我的数据库在 phpMyAdmin 上不可见,但在 mysql 的数据文件夹中可用