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