首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取最新记录

获取最新记录
EN

Stack Overflow用户
提问于 2019-11-02 07:18:44
回答 3查看 47关注 0票数 1

在SQL Server中,我使用两个表(AOC_MODEL和PACKAGE ),这两个表是我连接在一起的。我想从每个AOC_ID的I_FW列中获得最新的版本。

代码语言:javascript
复制
SELECT
    AOC_MODEL.AOC_ID,
    AOC_MODEL.CONTROLLER, 
    AOC_MODEL.AOC_FORM_FACTOR, 
    PACKAGE.I_FW, 
    PACKAGE.ETRACK_ID, 
    PACKAGE.ECO,
    PACKAGE.ECO_DATE
FROM            
    AOC_MODEL 
    INNER JOIN PACKAGE
        ON AOC_MODEL.AOC_ID = PACKAGE.AOC_ID
WHERE CONTROLLER LIKE 'intel%'

我期望能够显示任何给定AOC_IDI_FW列中具有最高编号的一条记录。

就像附件中的图片一样,我只想看到两个项目,其中AOC_ID 1171.93数量比其他117项目以及AOC_ID 118的数量1.20要高。因此,在这种情况下,我希望只看到两项,而不是11项。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-02 07:24:52

请尝试如下所示:

代码语言:javascript
复制
SELECT AOC_MODEL.AOC_ID
       , AOC_MODEL.CONTROLLER
       , AOC_MODEL.AOC_FORM_FACTOR
       , MAX(PACKAGE.I_FW)
       , MAX(PACKAGE.ETRACK_ID)
       , MAX(PACKAGE.ECO)
       , MAX(PACKAGE.ECO_DATE)
FROM AOC_MODEL INNER JOIN PACKAGE
ON AOC_MODEL.AOC_ID = PACKAGE.AOC_ID
WHERE CONTROLLER LIKE 'intel%'
GROUP BY AOC_MODEL.AOC_ID
         , AOC_MODEL.CONTROLLER
         , AOC_MODEL.AOC_FORM_FACTOR

这是DEMO

票数 1
EN

Stack Overflow用户

发布于 2019-11-02 07:24:42

您可以创建一个相关子查询来恢复当前aoc_id的最高i_wf,并使用它来过滤package上的联接,如下所示:

代码语言:javascript
复制
select
    a.aoc_id,
    a.controller, 
    a.aoc_form_factor, 
    p.i_fw, 
    p.etrack_id, 
    p.eco,
    p.eco_date
from            
    aoc_model a
    inner join package p
        on a.aoc_id = p.aoc_id
        and p.i_wf = (
            select max(p1.i_wf)
            from package p1
            where p1.aoc_id = p.aoc_id
        )
where controller like 'intel%'

为了提高性能,可以考虑在package(aoc_id, i_wf)上建立索引。

注意:表别名使查询更容易阅读和理解;我相应地修改了您的查询。

票数 1
EN

Stack Overflow用户

发布于 2019-11-02 09:34:16

我很确定这就是你想要的:

代码语言:javascript
复制
SELECT m.AOC_ID, m.CONTROLLER,  m.AOC_FORM_FACTOR, 
       p.I_FW, p.ETRACK_ID, p.ECO, p.ECO_DATE
FROM AOC_MODEL m JOIN
     (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY AOC_ID ORDER BY I_FW DESC) as seqnum
      FROM PACKAGE p
     ) p
     ON m.AOC_ID = p.AOC_ID
WHERE aoc.CONTROLLER LIKE 'intel%' AND p.seqnum = 1;

结果集中来自PACKAGE的所有值都来自集合行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58666899

复制
相关文章

相似问题

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