【发布时间】:2020-04-02 01:03:17
【问题描述】:
我试图通过两种不同的方法根据同一张表上的三列与一些过滤条件的组合来消除重复,但由于某种原因,两者的查询结果并不相同。
查询 1:
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:
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
两个查询的结果不应该相同吗?如果有人能告诉我我做错了什么会很棒吗?
谢谢, 凯文
【问题讨论】:
-
只是为了解释为什么结果不同:如果您使用的谓词存在任何三元组 xi.SERIAL_NBR,xi.MAC_ADDR,xi.UNIT_ADDR 以及其他,您可能会得到 row_number =1 的其他谓词,因此它们不会在外部查询中传递 WHERE 子句,因此您最终会得到更少的行。
-
@gsalem 明白了兄弟!完全错过了。你是对的。
标签: sql oracle count left-join greatest-n-per-group