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

时间:2013-02-14 19:37:24

标签: mysql sql

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

感谢和抱歉,如果它似乎是一个重复的帖子

1 个答案:

答案 0 :(得分:1)

这是一个需要大量自连接的查询:

select hl.post_id, h.*
from history h join
     (select h.*, count(*) as NumLater
      from history h join
           history h2
           on h.post_id = h2.post_id and
              h2.id >= h.id
      group by h.id
      having NumLater <= 3
     ) hl
     on h.user_id = hl.user_id
order by hl.post_id

内部查询执行自联接以计算同一帖子中每条记录之后的历史条目数。然后,join通过user_id将其连接到历史表。此版本消除重复。因此,用户可以在最后三个集合中用于两个不同的帖子。