从innodb中的另一个表加入第一个有效行

时间:2011-03-17 14:21:26

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

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

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

我尝试使用id按组加入子查询,但是没有用,我不能使用限制,因为我想选择多条记录。

2 个答案:

答案 0 :(得分: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为null)

这是一个常见的每组最大问题(还有其他方法可以解决)

答案 1 :(得分: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作为子查询。还有很多其他方法可以解决这个问题: - )