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