是否可以使用Redshift Spectrum中的“ IN”条件检查多列?

问题描述 投票:0回答:2

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

enter image description here

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

sql amazon-redshift greatest-n-per-group window-functions amazon-redshift-spectrum
2个回答
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

1
投票

您可以使用窗口功能:

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;
© www.soinside.com 2019 - 2024. All rights reserved.