Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从两个不同的表中查找最新记录_Mysql_Analytics - Fatal编程技术网

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

Mysql 如何从两个不同的表中查找最新记录,mysql,analytics,Mysql,Analytics,表1和表2共有两个表 第一列,foreign_id是两个表之间的公共列。 所有相关列的数据类型都相同 现在,我们需要根据timestamp列查找最新记录,对于从两个表中获取的每个外部\u id,例如,如下所示,还需要从\u table中找到一个额外的列,该列显示从哪个表中选择该行。 我能想到的一个方法是 把两张桌子合并起来 然后,查找每个外来id列的最新信息 任何更好的方法都可以做到这一点,因为两个表中都可能有5000多行。尝试以下方法: SELECT t1.foreign_id, M

表1和表2共有两个表

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

现在,我们需要根据timestamp列查找最新记录,对于从两个表中获取的每个外部\u id,例如,如下所示,还需要从\u table中找到一个额外的列,该列显示从哪个表中选择该行。

我能想到的一个方法是

把两张桌子合并起来 然后,查找每个外来id列的最新信息

任何更好的方法都可以做到这一点,因为两个表中都可能有5000多行。

尝试以下方法:

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列都是自动递增的。

根据您的解释,这样做可以:

 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; 

每个外部id是否在每个表中出现不止一次?@ysth是的,该表可以包含每个外部id的多行根据第一个答案,我们将得到两列,分别命名为max_time_table1和max_time_table2,根据连接条件,只要有匹配项,则两列中都会有值。但我需要的结果是,对于每个外部id,获取1行,并且该行可以来自表1或表2,基于时间戳为latest的条件参见最后一个查询@abhi