mysql - 获取每个帖子的最后三个用户的所有操作

标签 mysql sql database greatest-n-per-group

last Question中,我询问如何从历史表中获取最后三个用户的所有操作,该历史表存储用户在延期帖子上执行的所有操作,现在我想要的是获得相同的内容,但针对每个帖子

最后三位用户对每个帖子所做的所有操作

history table
     id     | post_id | action    |  user_id
     1      |  5      | 1         |  3
     1      |  23     | 2         |  1
     2      |  24     | 2         |  6
     3      |  34     | 1         |  7
     4      |  35     | 1         |  1
     5      |  36     | 1         |  1
     6      |  23     | 2         |  3
     7      |  24     | 2         |  1
     8      |  23     | 1         |  4
     9      |  24     | 1         |  5
     10     |  24     | 1         |  1
     11     |  23     | 1         |  2
     12     |  23     | 4         |  1

感谢并抱歉,如果它看起来是重复的帖子

最佳答案

我认为这会起作用:

SELECT  a.user_ID, a.post_id, a.action
FROM    tableName a
        INNER JOIN
        (
            SELECT  DISTINCT 
              @curRow:=IF(@prevRow=post_Id,@curRow+1,1) rn,
              user_ID, 
              Post_Id, 
              @prevRow:=Post_Id
            FROM    (
                SELECT DISTINCT Post_Id, User_Id
                FROM TableName
                ORDER   BY Post_Id, ID DESC 
              ) t  
              JOIN (SELECT @curRow:= 0) r

        ) b ON a.post_id = b.post_id AND a.user_id = b.user_id
WHERE b.rn <= 3
ORDER   BY a.post_id, a.User_ID

还有Fiddle .

关于mysql - 获取每个帖子的最后三个用户的所有操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925524/

相关文章:

mysql - 多个replace语句的SQL?

MySQL日志文件配置

mysql - MySQL中的批量替换字符串

database - 将主键从字符串更改为数字的最简单方法

sql - MS Access 索引 View

mysql - WordPress:将 MySQL 数据库导入到 MariaDB

php - 通过单击提交按钮 php 删除 mysql 表行

mysql - 从 MySQL 中的多个表中获取多行中的多个值

mysql - 从 MySQL 数据库最畅销产品中选择一个好、更好、最好的建议

java - 用于 Java 桌面应用程序的最佳数据库是什么