我有以下查询来获取每个组中的最新行
SELECT s1.* FROM ps s1
JOIN (
SELECT s2.id FROM ps s2
WHERE s2.userId = 63
ORDER BY s2.date DESC
) as a
ON (s1.id = a.id)
GROUP BY s1.name
然而,此查询的执行情况非常糟糕。 是否存在可以摆脱子查询和/或可以完成的任何其他优化的等效查询?
答案 0 :(得分:1)
您可以使用not exists
执行此操作,方法是选择给定name
没有更大日期的行:
select ps.*
from ps
where not exists (select 1
from ps ps2
where ps2.name = ps.name and
ps2.userid = 63 and
ps2.date > ps.date
) and
ps.userid = 63;
这适用于ps(name, userid, date)
上的索引。