【问题标题】:Join first valid row from another table in innodb加入innodb中另一个表的第一个有效行
【发布时间】:2011-07-17 10:54:41
【问题描述】:

我有 2 个表,一个包含一些相关数据的记录,另一个包含第一个表的历史数据。

历史表对于主表的每一行可能有很多行,我想做的是在从主表中拉出一个或多个时加入历史表中的最新记录。

我尝试使用按 id 分组的子查询,但没有成功,我不能使用限制,因为我想选择多个记录。

【问题讨论】:

  • 支持 MySQL 子查询如下: ... main_table INNER JOIN history_data ON (main_table.col=(SELECT latest history data ID)) ...

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


【解决方案1】:

一种解决方法:

select record.id
(select history.id from history where history.record_id = record.id order by history.id desc limit 1) as history_id
from record

如果您想要完整的查询,您可以使用该查询中的 id 作为子查询。还有很多其他方法可以解决这个问题:-)

【讨论】:

    【解决方案2】:

    假设历史表有原始id和时间戳组成的PK

    SELECT table.*, ht1.*
    FROM table INNER JOIN historical_table ht1
         ON table.id = ht1.id
         LEFT JOIN historical table ht2
         ON ht1.id = ht2.id AND ht1.timestamp < ht2.timestamp
    WHERE ht2.timestamp IS NULL
    

    逻辑的主要部分是选择没有更新记录的行(ht2.timestamp 为空)

    这是一个常见的 max-per-group 所以问题(还有其他方法可以解决)

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 1970-01-01
      • 2020-08-25
      • 2018-03-25
      • 2020-05-23
      • 1970-01-01
      • 2020-07-30
      • 2016-02-05
      • 2023-03-04
      相关资源
      最近更新 更多