输入表数据:
|Col1 |Col2 |Col3 |Col4 |Col5
|---- | --- |--- |--- |---
|AA | 11 |9009 |1 |1
|AA | 11 |9009 |2 |2
|BB | 22 |8888 |1 |1
|CC | 33 |7777 |1 |1
|CC | 33 |7777 |2 |2
|DD | 44 |6666 |1 |1
|EE | 55 |5555 |1 |1
|EE | 55 |5555 |2 |2
这应保存到目标表中,如下所示,因为col1,col2,col3是使用复合主键定义的:
Col1 |Col2 |Col3 |Col4 |Col5
-----------------------------------
AA |11 |9009 |1 | 1
BB |22 |8888 |1 | 1
CC |33 |7777 |2 | 2
DD |44 |6666 |1 | 1
EE |55 |5555 |2 | 2
如何在前3列使用distinct,但是选择所有5列?
我已经看到了选择一个不同列的其他示例。有谁可以帮助这个例子?
答案 0 :(得分:1)
一种方法是为前三列的每个组合排序行 - 这是分析函数的工作,特别是在这种情况下row_number()
。然后从每个“组”(或分析函数术语中的“分区”)中选择“第一行”。像
select col1, col2, col3, col4, col5
from ( select col1, col2, col3, col4, col5,
row_number() over (partition by col1, col2, col3 order by null) as rn
from input_table
)
where rn = 1
;
order by null
表示“按照您想要的顺序排序,我不在乎,只需在每个分区中排序。”
答案 1 :(得分:0)
另一种变体是使用GROUP BY,并在辅助列上聚合函数。例如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>