2016-10-01 5 views
0

結果を横結合で制限して、最新のN個の一致のみを返すようにします。結果を関連で限定する

これは私のクエリですが、参加内部の制限は、それはすべての訪問者

select am.id, am.title, ame.event, array_agg(row_to_json(visitors)) 
from auto_messages am 
left join apps a on am.app_id = a.id 
left join app_users au on a.id = au.app_id 
left join auto_message_events ame on ame.auto_message_id = am.id 
left join lateral (
    select 
     id, 
     name, 
     avatar, 
     ame.inserted_at 
    from visitors v 
    where v.id = ame.visitor_id 
    order by ame.inserted_at desc 
    limit 1 
) as visitors on visitors.id = ame.visitor_id 
where am.id = '100' 
group by am.id, ame.event 

答えて

1

を返すように私は問題がameであるかなり確信して、動作するようには思えません。そこでは行が生成されます。 joinvisitorsは、追加情報のみを取得しています。

だから、これはあなたの問題を解決する可能性があります:

select am.id, am.title, visitors.event, array_agg(row_to_json(visitors)) 
from auto_messages am left join 
    apps a 
    on am.app_id = a.id left join 
    app_users au 
    on a.id = au.app_id left join lateral 
    (select v.id, v.name, v.avatar, 
      ame.event, ame.inserted_at, ame.auto_message_id 
     from auto_message_events ame join 
      visitors v 
      on v.id = ame.visitor_id 
     order by ame.inserted_at desc 
     limit 1 
    ) visitors 
    on visitors.auto_message_id = am.id 
where am.id = '100' 
group by am.id, visitors.event; 

また、あなたは唯一の列のサブセットをしたい場合は、あなたのselect句を変更したい場合があります。

関連する問題