通过排序和过滤删除重复项

Remove duplicates by sorting and filtering

我的 table 中有如下所示的数据:

输入:

version value  code   type
PMS    0.00    01    HOURS
000    312.00  01    HOURS
000    0.00    04    HOURS
PMS    0.00    01    NON STOCK
000    835.00  01    NON STOCK
000    835.00  04    NON STOCK
  1. 第 1 步:按代码排序,即 01 和 04。
  2. 第 2 步:按类型排序,即 HOURS 和 NON STOCK。
  3. 第3步:按版本检索,如果是0.00则检索记录。

输出解释:

对于代码 = 01, 我们有 4 条记录,2 条记录类型 = HOURS,2 条记录类型 = NON STOCK。但选择版本不等于 PMS 的记录(由于列类型重复)。因此我们得到两个代码为 01 的输出。

   000    312.00   01    HOURS
   000    835.00   01    NON STOCK

对于代码 = 04, 我们有 2 条记录,1 条记录类型 = HOURS,1 条记录类型 = NON STOCK。因为我们这里没有重复的列类型,所以在这种情况下不需要比较版本。因此我们得到两个代码为 01

的输出
    000    0.00     04    HOURS
    000    835.00   04    NON STOCK

(数据库引擎是 Azure databricks)

预期输出:

version   value   code   type
   000    312.00   01    HOURS
   000    835.00   01    NON STOCK
   000    0.00     04    HOURS
   000    835.00   04    NON STOCK

假设如果没有重复行,即使版本是PMS也需要拉取记录。 试试这个:

select
* 
from(
select
a.*,
case when b.code is not null and version <>'PMS' then 1 
when b.code is null then 1
else 0 end as filter_val
from
input a
left outer join
(Select
code,
type
from input
group by 
code,
type having count(*) > 1) b
on a.code=b.code
and a.type=b.type) x
where filter_val=1;

你可以这样做:

select
  version, value, code, type
from (
  select *,
    row_number() over(partition by code, type order by version) as rn
  from t
) x
where rn = 1
order by code, type