我有一个名为customer_details_table
的Redshift Spectrum表,其中id
列不是唯一的。我还有另一列hierarchy
,该列基于具有相同ID的记录应具有的优先级。这是一个例子:
在这里,如果我们多次遇到与28846
相同的ID,则考虑到John具有最高的等级,我们将选择John作为合格的ID。
我正在尝试使用eligibility
上的group by
创建此id
列,然后选择与最大值hierarchy
相对应的记录。这是我的SQL代码:
SELECT *,
CASE WHEN (
(id , hierarchy) IN
(SELECT id , max(hierarchy)
FROM
customer_details_table
GROUP BY id
)
) THEN 'Qualified' ELSE 'Disqualified' END as eligibility
FROM
customer_details_table
运行此文件时出现以下错误:
SQL Error [500310] [XX000]: [Amazon](500310) Invalid operation: This type of IN/NOT IN query is not supported yet;
上面的代码在我的表(customer_details_table
)是常规Redshift表时工作正常,但在同一表是外部频谱表时失败。任何人都可以提出一个好的解决方案/替代方法来在频谱表中实现相同的逻辑吗?
您可以使用窗口函数来生成eligibility
列:基本上,您需要按id
划分行,并在每个组中按hierarchy
降序进行排名。
select
*,
case when row_number() over(partition by id order by hierarchy desc) = 1
then 'Qualified' else 'Disqualified'
end eligibility
from customer_details_table
您可以使用窗口功能:
select cdt.*
from (select cdt.*,
row_number() over (partition by id order by hierarchy desc) as seqnum
from customer_details_table cdt
) cdt
where seqnum = 1;