私はapps
テーブルを持っています。各アプリには多くのconversations
とusers
があります。会話にはmessages
が多く、各メッセージはvisitor
またはuser
に属し、visitor
には多くの会話を持つことができます。クエリで重複する結果
私の会話ごとに、会話に最後に書き込んだユーザーの名前とアバターを添付したいと思います。
ユーザーが返信していない場合は、最も最近作成された3人のユーザーのavatars
をアプリ名と共に取得し、代わりに使用したいと考えています。
これは私がこれまで持っているものですが、すべてのヘルプは非常にあるそれは同じ対話idのための複数の結果を返す、と私は見つかっていないアプリのユーザーを取得するソリューションは
select
c.id,
c.last_message,
c.last_activity,
coalesce(last.display_name, a.name || ' Team') as name,
array_agg(last.avatar)
from messages m
left join conversations c on c.id = m.conversation_id
left join apps a on a.id = c.app_id
left join lateral (
select u.id, u.display_name, u.avatar
from users u
where u.id = m.user_id
) as last on true
where c.visitor_id = 'c6p77hu9v000a4zcth4lnefn9'
group by c.id, last.display_name, last.avatar, a.name
order by c.inserted_at desc
をアバター
これが解決すればわかりません。最近返信されたとは、その特定の会話の最後に挿入された行を取得することを意味します。その会話にMIN/MAX()を使ってみましたか?テーブル構造とサンプル出力を表示する方が良いでしょう。 –
希望の出力内でサンプルデータを入力すれば、私は助けることができます:) – kbball