Teradata SQL 使用特定顺序删除重复项

Teradata SQL Get Rid of Duplicates with Specific Order

我这周才开始使用 teradata SQL,如果我的措辞不正确,请见谅。我最初在 R 中创建了一个脚本,用于删除 table 中的重复项,但现在我需要将此代码转移到 SQL 中。这是一些示例数据:

我想删除 DELETE 列中的任何 D,按 ID 分区,按状态、日期和金额排序(实际日期和金额在 ?s 之前)。我希望 STATUS 按此顺序排列:P、H、F、U、T。我希望第一行填写 STATUS、DATE 和 AMOUNT(按 STATUS 顺序)。这是示例输出数据:

我真的被订单问题困住了,我编写的代码根本没有生成任何数据(但没有错误)。

示例代码:

CREATE VOLATILE TABLE new_tble
AS
(SELECT * 
FROM table
QUALIFY row_number() OVER (partition BY ID ORDER BY ID, DATE, AMOUNT)=1
WHERE DELETE <> 'D'
)
with data;

这是将您的描述直接翻译成 Teradata SQL,假设 ? 表示 NULL:

select *
from tab
where "delete" is null
  and "date" is not null
  and amount is not null
qualify
   row_number() 
   over (partition by id
         order by case status 
                    when 'P' then 1 
                    when 'H' then 2 
                    when 'F' then 3
                    when 'U' then 4 
                    when 'T' then 5 
                  end
                  ,"date"
                  ,amount) = 1