我一直在尝试使用JOIN执行查询以提高性能。 当前,将执行一个查询以检索所有记录,然后针对每个记录执行另一个查询以获取已完成的特定步骤。
我有两个表,如下所示:
用户:
id - name - email
------------------
1 - alex - a@b.com
步骤:
id - userId - step - date
-------------------------------
1 - 1 - 1 - 2018/01/01
2 - 1 - 2 - 2018/02/02
3 - 1 - 3 - 2018/03/03
现在我用来抓取所有用户及其各自步骤的查询是:
SELECT u.id, u.name, u.email, s.step, s.date
FROM users u
LEFT JOIN steps s ON s.userId = u.id
但这会返回:
id - name - step - date
-------------------------------
1 - alex - 1 - 2018/01/01
2 - alex - 2 - 2018/02/02
3 - alex - 3 - 2018/03/03
我只对最后一个结果感兴趣,我相信我应该使用某种子查询?还有MAX(s.date)函数?
答案 0 :(得分:1)
你是正确的
Where steps.id IN (select
MAX(id) from
steps group by user userid)
这假设您的MAX(id)步长始终是最合适的日期。