我有两个桌子


公司
company_relocation_histories


关系是公司有很多搬迁历史

样本数据表公司

mysql - mysql如何根据最新的关系数据进行查询-LMLPHP

样本数据表company_relocation_histories

mysql - mysql如何根据最新的关系数据进行查询-LMLPHP

示例数据库-> https://www.dropbox.com/s/e8uvuc9vvgacz0q/test.sql?dl=0

我想查询最近已重新定位到某个位置(例如FR)的所有Company。仅会计算最后一个位置。

预期的数据将仅列出公司ID 1(MIB)。

公司ID 3(SKD)将被排除在外,因为尽管它们之前已迁移到FR,但最后一次迁移是SG。

这是我对尚无法使用的SQL查询的看法(错误的结果)。如何解决呢?谢谢堆栈溢出!

SELECT *
FROM   `companies`
WHERE  EXISTS (SELECT *
               FROM   `company_relocation_histories`
               WHERE  `companies`.`id` =
`company_relocation_histories`.`company_id`
                      AND `relocation_location` = 'FR'
                      AND `id` = (SELECT Max(id)
                                  FROM   `company_relocation_histories` AS `sub`
                                  WHERE  sub.relocation_location =
       company_relocation_histories.relocation_location))

最佳答案

您可以对max(id)使用子查询,并且count> 1

SELECT *
FROM   `companies`  c
INNER JOIN company_relocation_histories h on c.id = h.company_id
INNER JOIN
(
    SELECT company_id, Max(id)  max_id
    FROM   `company_relocation_histories` AS `sub`
    group by company_id
    having count(*) >1
) t on t.company_id = c.id
        and t.max_id  = h.id
          and h.relocation_location  ='FR'


这样,您所有的公司都拥有多个地点,并且与上一个地点相关

10-04 11:14
查看更多