我有一个用例,我必须从分区的配置单元表的两个不同分区中计算不匹配的行(不包括匹配记录)。
让我们假设有一个称为test的分区表,该表在as_of_date列上进行了分区。现在要获取不匹配的行,我尝试了两种选择-
1.)
select count(x.item_id)
from
(select coalesce(test_new.item_id, test_old.item_id) as item_id
from
(select item_id from test where as_of_date = '2019-03-10') test_new
full outer join
(select item_id from test where as_of_date = '2019-03-09') test_old
on test_new.item_id = test_old.item_id
where coalesce(test_new.item_id,0) != coalesce(test_old.item_id,0)) as x;
2。)我首先创建一个视图,然后在该视图上进行查询
create view test_diff as
select coalesce(test_new.item_id, test_old.item_id) as item_id, coalesce(test_new.as_of_date, date_add(test_old.as_of_date, 1)) as as_of_date
from test test_new
full outer join test test_old
on (test_new.item_id = test_old.item_id and date_sub(test_new.as_of_date, 1) = test_old.as_of_date)
where coalesce(test_new.item_id,0) != coalesce(test_old.item_id,0);
然后我正在使用查询
select count(distinct item_id) from test_diff where as_of_date = '2019-03-10';
两种情况都返回不同的计数。第二种选择是减少计数。请提供任何有关计数为何不同的建议。
答案 0 :(得分:0)
假设您在第二个选项中处理过test_new,test_old表(已过滤为as_of_date ='2019-03-10')
第一个选项,您正在使用选择子句count(X.item_id),其中,第二个选项的计数为(distinct)。不重复可能会减少您在以后的选项中的项目数量。