在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
感谢和抱歉,如果它似乎是一个重复的帖子
答案 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将其连接到历史表。此版本不消除重复。因此,用户可以在最后三个集合中用于两个不同的帖子。