mysql table join with max



表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)上建立索引。

相关内容

  • 没有找到相关文章

最新更新