选择具有条件的组的第一行

mnemlml8  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(368)

我有一个这样的表格:

FieldA   FieldB   FieldC
1111     ABC      X
1111     DEF      Y
1111     GHI      X
2222     JKL      Y
2222     MNO      X
3333     PQR      U
3333     STT      U

我想为每个fielda选择一个fieldb,优先选择fieldc中的x(如果没有x,则选择另一个)。
我试过使用带有分区的秩函数,但是我发现它太不一致了,我现在遇到了一堵墙。
我的输出如下所示:

FieldA   FieldB   FieldC
    1111     ABC      X
    2222     MNO      X
    3333     PQR      U

查询:

Select
rank() over (partition by Field3 order by Field1),
Field,1 Field2, Field3
FROM table
ORDER BY Field1, Field3

我想我需要把这个查询放在一个子查询中。。。

u0njafvf

u0njafvf1#

你可以用 ROW_NUMBER 这样地:

SELECT FieldA, FieldB, FieldC
FROM (
   SELECT FieldA, FieldB, FieldC,
          ROW_NUMBER() OVER (PARTITION BY FieldA
                             ORDER BY CASE 
                                         WHEN FieldC = 'X' THEN 1
                                         ELSE 2
                                      END,
                                      FieldB) AS rn 
   FROM mytable) AS t
WHERE t.rn = 1

上面的查询从每个记录中选取一个记录 FieldA 分区。它优先考虑 FieldC = 'X' 所有其他记录。

相关问题