首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql如何基于最新的关系数据进行查询

mysql如何基于最新的关系数据进行查询
EN

Stack Overflow用户
提问于 2019-01-02 06:47:03
回答 2查看 94关注 0票数 0

我有两张桌子

  1. 公司
  2. company_relocation_histories

关系是公司有很多重新定位的历史

样本数据表公司

样本数据表company_relocation_histories

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

我想查询所有最近搬迁到特定地点的公司,例如FR。只有最后一个地点才算在内。

预期的数据只有ID1公司(MIB)才会上市。

公司id 3 (SKD)将被排除在外,因为虽然他们以前已经搬迁到FR,但最后一次搬迁是SG。

下面是我对SQL查询的看法,该查询尚未工作(结果错误)。如何解决这个问题?谢谢堆栈溢出!

代码语言:javascript
运行
复制
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)) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-02 07:06:58

YOu可以对max(id)使用子查询并计数>1

代码语言:javascript
运行
复制
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'

这样,所有的公司都有一个以上的地点,并与最后一个地点相关联。

票数 0
EN

Stack Overflow用户

发布于 2019-01-02 07:03:45

检查这个查询。内部查询组reloaction_histories以获得至少有两个或更多重定位的company_id。

代码语言:javascript
运行
复制
select * from companies 
where id in (
  select company_id 
  from company_relocation_histories 
  group by company_id
  having count(*) = 2
);

编辑:根据OP的评论

代码语言:javascript
运行
复制
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); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54002312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档