表t1包含一系列基本数据,在Id上是唯一的。
表t2包含大量的时间序列数据,我需要将其范围缩小到一个子集。我只对某些值和其他值感兴趣。在这种背景下努力寻找最干净的方法。
下面的查询运行,但我错误地使用了MAX。学习mysql docs related to greatest-n-pergroup并尝试解决问题。
我对使用效率和效率感兴趣 - 在哪些条款中添加最佳模式是什么。
select t1.*,
t2.lastdate as lastdate,
from t1
left join
( select Id,
max(LastDate) as lastdate
from t2table
where
somecolumn like '%somevalue%'
group by Id
) t2
on t1.Id = t2.Id
where yetanothercolumn = "yetanothervalue";
此外 - 任何指向文档或其他线程和示例的链接都会受到赞赏。
答案 0 :(得分:1)
您的查询是合理的:
select t1.*,
t2.lastdate as lastdate,
from t1 left join
(select Id, max(LastDate) as lastdate
from t2table
where somecolumn like '%somevalue%'
group by Id
) t2
on t1.Id = t2.Id
where yetanothercolumn = 'yetanothervalue';
但是,对于不在最终结果集中的ID,它对表2进行了不必要的工作。因此,在许多情况下,相关子查询会更快:
select t1.*,
(select max(LastDate)
from t2table t2
where t2.Id = t.Id and t2.somecolumn like '%somevalue%'
) as lastdate,
from t1
where yetanothercolumn = 'yetanothervalue';
为了提高性能,您需要t1(yetanothercolumn)
和t2table(id, somecolumn, LastDate)
上的索引。