我有一个用例,我需要在 PARTITION 上使用 ROW_NUMBER():
就像是:

SELECT
  Column1 , Column 2
  ROW_NUMBER() OVER (
    PARTITION BY ACCOUNT_NUM
    ORDER BY FREQ, MAN, MODEL) as LEVEL
FROM
  TEST_TABLE

我需要在 Impala 中解决这个问题。不幸的是,Impala 不支持子查询,也不支持 ROW_NUMBER() OVER 功能。
感谢您的帮助。

最佳答案

Impala 对于这种类型的查询相当有限。有一些假设,这个查询是可能的:

  • 分区子句中的四列从不 NULL
  • 分区子句中的四列唯一标识一行

  • 该查询相当丑陋且昂贵:
    select tt.column1, tt.column2, count(*) as level
    from test_table tt join
         test_table tt2
         on tt.account_num = tt2.account_num and
            (tt2.freq < tt.freq or
             tt2.freq = tt.freq and tt2.man < t.man or
             tt2.freq = tt.freq and tt2.man = t.man and tt2.model <= t.model
            )
    group by tt.column1, tt.column2, tt.account_num, tt.freq, tt.man, tt.model;
    

    关于sql - ROW_NUMBER( ) OVER 在黑斑羚,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26223303/

    10-16 12:35