有没有一种方法可以在Redshift Spectrum中使用“ IN”条件检查多列?

我有一个名为customer_details_table的Redshift Spectrum表,其中id列不是唯一的。我还有另一列hierarchy,该列基于具有相同ID的记录应具有的优先级。这是一个示例:

有没有一种方法可以在Redshift Spectrum中使用“ IN”条件检查多列?

在这里,如果我们多次遇到与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表时,上面的代码可以正常工作,但是当同一表是外部频谱表时,上述代码将失败。任何人都可以提出一个好的解决方案/替代方法来在频谱表中实现相同的逻辑吗?

ooole 回答:有没有一种方法可以在Redshift Spectrum中使用“ IN”条件检查多列?

您可以使用窗口功能:

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;
,

您可以使用窗口函数来生成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
本文链接:https://www.f2er.com/2528083.html

大家都在问