0

最後の質問で、遅延投稿でユーザーが行ったすべてのアクションを保存する履歴テーブルから、最後の 3 人のユーザーのすべてのアクションを取得することについて尋ねまし

各投稿に対する最後の 3 人のユーザーのすべてのアクション

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

内部クエリは自己結合を実行して、同じ投稿の各レコードの後の履歴エントリの数を計算します。次に、joinはuser_idによってこれを履歴テーブルに結合します。このバージョンでは、重複は排除されません。したがって、ユーザーは2つの異なる投稿の最後の3つのセットに入る可能性があります。

于 2013-02-14T20:16:18.660 に答える