我需要使用一个包含7列的现有表在单元格中创建一个临时表。我只想去除前三列的重复项,并在其他4列中保留相应的值。我不在乎实际删除哪一行,而只使用前三行进行反复制。
发布于 2015-12-08 20:49:56
如果您没有考虑订购,您可以使用如下所示的东西
create table table2 as
select col1, col2, col3,
,split(agg_col,"|")[0] as col4
,split(agg_col,"|")[1] as col5
,split(agg_col,"|")[2] as col6
,split(agg_col,"|")[3] as col7
from (Select col1, col2, col3,
max(concat(cast(col4 as string),"|",
cast(col5 as string),"|",
cast(col6 as string),"|",
cast(col7 as string))) as agg_col
from table1
group by col1,col2,col3 ) A;下面是另一种方法,它可以很大程度上控制排序,但比上面的方法慢。
create table table2 as
select col1, col2, col3,max(col4), max(col5), max(col6), max(col7)
from (Select col1, col2, col3,col4, col5, col6, col7,
rank() over ( partition by col1, col2, col3
order by col4 desc, col5 desc, col6 desc, col7 desc ) as col_rank
from table1 ) A
where A.col_rank = 1
GROUP BY col1, col2, col3;级别()高于(.)如果order列都相等,则函数返回多个列,秩为'1‘。在我们的例子中,如果所有七列都有两个值完全相同的列,那么当我们使用col_rank =1时,就会出现重复的情况。这些重复项可以使用max和group子句进行删除,如上面的查询所写。
https://stackoverflow.com/questions/34138868
复制相似问题