首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Distinct vs row_number() -相同条件的查询在oracle中得到不同的结果?

Distinct vs row_number() -相同条件的查询在oracle中得到不同的结果?
EN

Stack Overflow用户
提问于 2019-12-09 05:47:27
回答 1查看 53关注 0票数 0

我试图通过两种不同的方法,通过两种不同的方法来消除基于同一表上的三个列的组合的重复项,但由于某些原因,这两个查询的结果并不相同。

问题1:

代码语言:javascript
运行
复制
select count(*) 
from (
    select distinct 
        SERIAL_NBR,
        MAC_ADDR,
        UNIT_ADDR 
    from TGT_DEVICE_DETAILS 
    where MODEL_ID = 'ABC' and REC_CREATE_DT_KEY = 20191130
);

结果- 66181

问题2:

代码语言:javascript
运行
复制
select count(*) from (
    select 
        xi.*,
        row_number() over (
            partition by xi.SERIAL_NBR,xi.MAC_ADDR,xi.UNIT_ADDR 
            order by test_date_m desc
        ) rownumber 
    from TGT_DEVICE_DETAILS xi
) 
where 
    rownumber  = 1 
    and REC_CREATE_DT_KEY = 20191130 
    and MODEL_ID = 'ABC';

结果- 65495

这两个查询的结果不应该是相同的吗?如果有人能告诉我我做错了什么就太好了。

谢谢,Kavin

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-09 05:51:08

第二个查询在外部查询中具有条件REC_CREATE_DT_KEY = 20191130 and MODEL_ID = 'ABC',而在第一个查询中,这些条件位于内部查询中。

将条件移动到内部查询,您应该会得到相同的结果:

代码语言:javascript
运行
复制
select count(*) from (
    select 
        xi.*,
        row_number() over (
            partition by SERIAL_NBR, MAC_ADDR, UNIT_ADDR 
            order by TEST_DATE_M desc
        ) rownumber 
    from TGT_DEVICE_DETAILS xi
    WHERE REC_CREATE_DT_KEY = 20191130 and MODEL_ID = 'ABC'
) 
where rownumber  = 1;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59240194

复制
相关文章

相似问题

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