选择三列(A,B,C)并返回其中(B,C)不同且A处于最大值的行,因为有多次出现(B,C)对

时间:2017-02-12 07:29:58

标签: sql hive max distinct

在Hive中工作,我有一个包含三列A(INT),B(STRING)和C(STRING)的表。 B& C列具有重复的配对值(即,行1和行10可以在列B和C中具有相同的串)。我试图返回不同B,C对的完整行(即A,B,C),其中A列是所有出现的不同B,C对中的最大值。感谢所有帮助。

输入表的示例

a = [7, 12, 9, 14, 15, 18, 12]
b = [9, 14, 8, 3, 15, 17, 15]

big = []
i = 0
while i < len(a):
    big.append(max(a[i], b[i]))
    i += 1

查询输出示例

Col1 Col2 Col3
----------------
1111, str1, str2 
2222, str1, str2
3333, str3, str4
4444, str5, str6
5555, str3, str4
6666, str5, str6

1 个答案:

答案 0 :(得分:2)

如果您只想要结果中的三列:

select max(a) a, b, c
from your_table
group by b, c;

如果要选择更多列,可以使用窗口函数row_number

select *
from (
    select t.*,
        row_number() over (
            partition by b, c
            order by a desc nulls last
            ) rn
    from your_table t
    ) t
where rn = 1;