0

最后一个问题中,我询问了如何从历史表中获取最后三个用户的所有操作,该表存储用户在延期帖子上所做的所有操作,现在我想要的是获得相同的东西,但对于每个帖子

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

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

谢谢,对不起,如果它似乎是重复的帖子

4

1 回答 1

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

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

于 2013-02-14T20:16:18.660 回答