質問: 【実現したいこと】 userテーブルにblockedというカラム(0 or 1)を追加し、ブロックされているユーザーを検索できるようにしたい。 【前提】 今回登場するテーブル **line_webhook_events** カラム: event_type,line_user_id ↑ ユーザーにブロックされたら"unfollow"、ブロック解除されたら"follow"がレコード(event_type)として登録される。 **line_user** カラム:id があります。 この2つのテーブルは互いにアソシエーションになっております。 ーーーーーーーーーーーーー 【現状思いついていること】 ブロックされているLINEユーザーを取り出し、 単にunfollowというweb_hook_eventsを抽出し、そこに紐づくユーザーレコードを取り出せばいいと思っていたのですが、 「unfollow後にブロック解除(follow)されたユーザーは除かなければならない」ということに気が付きました。 まとめると 「該当するユーザーから送信された最後のwebhookのevent_typeがunfollowである」という条件で検索したいということになります。 これをsqlで抽出したいとおもっているのですが、どのような検索をかければいいのか思いつきません。 イメージは 1unfollowのレコードを取り出し、そこに紐づくユーザーを抽出 2ユーザーの最新のweb_hookがunfollowかどうか確かめる ができればなと考えております。 これを一度のコマンドで実現することは可能でしょうか。 知見をお持ちの方がいらっしゃいましたらご教示頂けますと幸いです。
回答: > > 「ユーザーから送信された最後」を判別する情報はline_webhook_eventsにありますか? > > > > > > > line_webhook_eventsにはevent_typetとそれに紐づくuser_idしか手がかりがありません。 > > > > > > > > > 無ければ無理です。 一応、ctidという行を特定する隠れたシステム列はありますが、不変では無いので。 defaultをcurrent_timestampに設定したカラムを追加するなどして、時系列が判断できるようにするところからですね。