加入一个获得500k +新行并在快速查询中选择最新行的表

时间:2015-11-25 10:18:52

标签: sql postgresql

我有一个用户表和一个调用表,每天有大约500k新行插入到调用表中。每个通话记录都有一个user_id列,我有大约700个用户,但我需要做的是选择每个用户并获取他们最近的呼叫created_at时间。这样做的最快方法是什么?

1 个答案:

答案 0 :(得分:1)

select u.*, MAX(c.created_at)
from users u
    left join calls c on u.user_id = c.user_id
group by u.user_id

GROUP BY仅在user_id为主键时才有效。

替代答案:

使用NOT EXISTS只选择最新的电话:

select *
from users u
    left join calls c on u.user_id = c.user_id
where not exists (select 1 from calls c2
                  where c2.created_at> c.created_at
                    and c2.user_id = c.user_id)