나는 apps
테이블을 가지고 있습니다. 각 앱에는 conversations
과 users
이 많이 있습니다. 대화에 많은 messages
이 있고 각 메시지는 visitor
또는 user
에 속할 수 있으며 visitor
은 많은 대화를 가질 수 있습니다.쿼리 결과가 중복됩니다.
각 대화마다 가장 최근에 대화에 쓴 사용자의 이름과 아바타를 첨부하고 싶습니다.
사용자가 답을 얻지 못한 경우 가장 최근에 만든 사용자의 avatars
을 앱 이름과 함께 가져 와서 대신 사용하고 싶습니다.
이
는 어떤 도움을 크게이다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
을 지금까지 가지고 있지만,이 같은 대화 ID에 대해 여러 결과를 반환, 내가 응용 프로그램 사용자를 얻기에 해결책을 발견하지 않았습니다 아바타 것입니다 apprecicated
이것이 해결되는지 확실하지 않습니다. 최근에 회신한다는 것은 특정 대화에 마지막으로 삽입 된 행을 가져 오려는 것을 의미합니다. 그 대화에 MIN/MAX()를 사용해 보셨습니까? 테이블 구조와 샘플 출력을 보여주는 것이 더 좋을 것입니다. –
원하는 출력 내에서 샘플 데이터를 제공하면 도와 드릴 수 있습니다 :) – kbball