mysql表连接最大值

时间:2015-08-21 13:36:22

标签: mysql sql greatest-n-per-group

表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";

此外 - 任何指向文档或其他线程和示例的链接都会受到赞赏。

1 个答案:

答案 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)上的索引。