sql—如果表有两个唯一的值,而其余的列是相同的,那么如何从表中选择最小值

m2xkgtsf  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(447)

例如:输入

ID   Col1   Col2   Col3
--   ----   ----   ----
1       a     a     sql  
2       a     a    hive

输出

ID   Col1   Col2   Col3
--   ----   ----   ----
1       a     a     sql

这里我的id值和col3值是唯一的,但是我需要过滤minid并填充所有记录。
我知道下面的方法将工作,但任何最好的方法,除此之外,请建议
按col1、col2从表组中选择col1、col2、min(id);
在id上加入这个,col1,col2

2nbm6dog

2nbm6dog1#

我想你想要 row_number() :

select t.*
from (select t.*, row_number() over (partition by col1, col2 order by id) as seqnum
      from t
     ) t
where seqnum = 1
a5g8bdjr

a5g8bdjr2#

似乎配置单元支持行编号。虽然我从未使用过hive,但其他rdbms会这样使用它来获取min行的全部内容,而不需要联接(如果存在重复的最小值,则不会遇到问题)

SELECT a.* FROM 
(
  SELECT *, ROW_NUMBER() OVER(ORDER BY id) rn FROM yourtable
) a
WHERE a.rn = 1

内部查询选择所有表数据,并按id的顺序建立递增计数器。它可以基于任何列,min id(在本例中)是第1行。如果你想要最大值, order by ID desc 如果您想为另一列的不同值重新启动该数字(例如,10个col3是“sql”,20行有“hive”),您可以说是按col3按id排序的分区,行号将是一个计数器,它为col3的相同值递增,为col3的每个不同值从1重新启动

相关问题