我有两张桌子
关系是公司有很多搬迁史
样本数据表公司
示例数据表company_relocation_history
示例数据库 -> https://www.dropbox.com/s/e8uvuc9vvgacz0q/test.sql?dl=0
我想查询最近搬迁到某个地方的所有公司,例如到 FR。只计算最后一个位置。
预期数据仅会列出公司 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'
通过这种方式,您可以让所有公司拥有多个地点并与最后一个地点相关
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句