我有两张桌子
关系是公司有很多重新定位的历史
样本数据表公司
样本数据表company_relocation_histories
示例DB -> https://www.dropbox.com/s/e8uvuc9vvgacz0q/test.sql?dl=0
我想查询所有最近搬迁到特定地点的公司,例如FR。只有最后一个地点才算在内。
预期的数据只有ID1公司(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))
发布于 2019-01-02 07:06:58
YOu可以对max(id)使用子查询并计数>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'
这样,所有的公司都有一个以上的地点,并与最后一个地点相关联。
发布于 2019-01-02 07:03:45
检查这个查询。内部查询组reloaction_histories以获得至少有两个或更多重定位的company_id。
select * from companies
where id in (
select company_id
from company_relocation_histories
group by company_id
having count(*) = 2
);
编辑:根据OP的评论
SELECT *
FROM companies
WHERE id IN (SELECT company_id
FROM (SELECT company_id,
Lead(relocation_location) OVER(ORDER BY id) x,
Count(*) OVER (partition BY company_id) cnt
FROM company_relocation_histories) t
WHERE x = 'FR'
AND cnt = 2
GROUP BY company_id);
https://stackoverflow.com/questions/54002312
复制相似问题