【问题标题】:SQL Impala remove duplicates based on two or more columns and return allSQL Impala 删除基于两列或更多列的重复项并返回所有
【发布时间】:2022-01-26 11:24:02
【问题描述】:

如何根据表的两个或多个(从许多)列中删除重复项并仍然返回所有列,例如使用:

SELECT DISTINCT col1, col2, col3 
FROM table  

然后返回col1,col2,col3,col4,col5... 等等?

我做不到,因为DISTINCT 语句只能在SELECT 之后,并且不能与* 结合。

如果有没有DISTINCT 语句的替代方案?

【问题讨论】:

    标签: sql duplicates distinct impala


    【解决方案1】:

    您可以利用分析函数 row_number 来获得所需的查询输出。

    select * from (
    select col1,col2,..
          ,row_number() over(partition by col1,col2 order by col1 desc /*any order by column will suffice*/) as rnk
      from table1)y
    where y.rnk=1
    

    【讨论】:

    • 非常感谢,辛苦了。一个问题。我想简单地保留相同列的每个组合的第一个观察结果。这是此功能的默认设置吗?另外order by如何影响我的决赛桌?谢谢!
    • 排序依据将确定您希望保留的第一个观察结果。如果您想保留最早的 datetime 列,那么您可以按 datetimecolumn desc 排序
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2015-09-20
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多