2017-10-13 206 views
1

我在具有大约80列的配置单中的表中有多个列。我需要在某些列上应用distinct子句,并从其他列中获取第一个值。下面是我想要实现的内容。在特定列上选择不同的列,但在配置单元中也选择其他列

select distinct(col1,col2,col3),col5,col6,col7 
from abc where col1 = 'something'; 

上面提到的所有列都是文本列。所以我不能应用分组和聚合函数。

回答

1

您可以使用row_number函数来解决问题。

create table temp as 
select *, row_number() over (partition by col1,col2,col3) as rn 
from abc 
where col1 = 'something'; 

select * 
from temp 
where rn=1 

您还可以在分区时对表进行排序。

row_number() over (partition by col1,col2,col3 order by col4 asc) as rn

0

DISTINCT是SQL中过度使用和最不理解的函数。这是对整个结果集执行的最后一件事,并使用选择中的所有列删除重复项。你可以做一组由一串,其实也就是这里的答案:

SELECT col1,col2,col3,COLLECT_SET(col4),COLLECT_SET(col5),COLLECT_SET(col6) 
FROM abc WHERE col1 = 'something' 
GROUP BY col1,col2,col3; 

现在,我虽然重新阅读你的问题,我真的不知道你是什么之后。您可能必须将表格加入其自身的集合中。