限制结果

时间:2016-10-01 09:34:02

标签: sql postgresql

我想限制横向连接中的结果,以便它只返回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 个答案:

答案 0 :(得分: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子句。