表t1包含一系列基本数据,并且在Id上是唯一的。
表t2包含大量的时间序列数据,我需要将其缩小到一个子集。我只对一个值和另一个值感兴趣。在这种情况下,努力寻找最干净的方法。
下面的查询运行,但是我错误地使用了MAX。研究mysql文档中有关greatest-n-pergroup的问题,并试图解决这个问题。
我对where的使用和效率很感兴趣——添加where子句的最佳模式是什么。
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";
也-任何链接到文档或其他线程和示例的赞赏。
你的查询是合理的:
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)
上建立索引。