2016-10-01 80 views
0

我想限制橫向連接的結果,以便它只返回N個最近的匹配。聯合限制結果

這個我的查詢,但裏面加入了極限似乎沒有工作,因爲它返回我敢肯定,問題是ame所有遊客

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

。這是行生成的地方。 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條款,如果只想列的子集。