如何从两个不同的表中查找最新记录

时间:2017-06-14 07:29:51

标签: mysql analytics

有2个表table1和表2

table1 data

table2 data

第一列 foreign_id 是两个表之间的公共列。 所有相关列的数据类型相同。

现在,我们需要找到基于时间戳列的最新记录,对于从这两个表中获取的每个foreign_id,例如如下所示,还有一个额外的列 from_table ,它显示了从哪个表这个行被选中。 result table

我能想到的一种方法是

  

合并两个表格   然后,找到每个foreign_id列的最新信息

任何更好的方法,因为两个表中都可能有5000多行。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
  t1.foreign_id,
  MAX(t1.timestamp) max_time_table1,
  MAX(t2.timestamp) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id; 

注意:如果记录数量非常大,这可能会有点慢。

但是你也可以使用它:

SELECT a.foreign_id, 
IF(a.max_time_table1 > a.max_time_table2, a.max_time_table1, a.max_time_table2) latest_update
FROM(  
 SELECT
 t1.foreign_id,
 SUBSTRING_INDEX(GROUP_CONCAT(t1.timestamp ORDER BY t1.id DESC),',',1)    max_time_table1,
SUBSTRING_INDEX(GROUP_CONCAT(t2.timestamp ORDER BY t2.id DESC),',',1) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id) a; 

确保两个表中的id列都是auto_increment。

答案 1 :(得分:0)

根据你的解释,这样就可以了:

 SELECT 
  foreign_id,
  CASE
   WHEN max_time_table1 < max_time_table2 THEN max_time_table2
   WHEN max_time_table2 < max_time_table1 THEN max_time_table1
 END as timestamps
FROM(
 SELECT
  t1.foreign_id,
  SUBSTRING_INDEX(GROUP_CONCAT(t1.timestamp ORDER BY t1.id DESC),',',1)    max_time_table1,
 SUBSTRING_INDEX(GROUP_CONCAT(t2.timestamp ORDER BY t2.id DESC),',',1) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id) a;