我有两个桌子
公司
company_relocation_histories
关系是公司有很多搬迁历史
样本数据表公司
样本数据表company_relocation_histories
示例数据库-> 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'
这样,您所有的公司都拥有多个地点,并且与上一个地点相关