我在具有大约80列的配置单中的表中有多个列。我需要在某些列上应用distinct子句,并从其他列中获取第一个值。下面是我想要实现的内容。在特定列上选择不同的列,但在配置单元中也选择其他列
select distinct(col1,col2,col3),col5,col6,col7
from abc where col1 = 'something';
上面提到的所有列都是文本列。所以我不能应用分组和聚合函数。
我在具有大约80列的配置单中的表中有多个列。我需要在某些列上应用distinct子句,并从其他列中获取第一个值。下面是我想要实现的内容。在特定列上选择不同的列,但在配置单元中也选择其他列
select distinct(col1,col2,col3),col5,col6,col7
from abc where col1 = 'something';
上面提到的所有列都是文本列。所以我不能应用分组和聚合函数。
您可以使用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
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;
现在,我虽然重新阅读你的问题,我真的不知道你是什么之后。您可能必须将表格加入其自身的集合中。