Sql 若表中有两个唯一的值,且其余列相同,如何从表中选择最小值

Sql 若表中有两个唯一的值,且其余列相同,如何从表中选择最小值,sql,hive,hiveql,Sql,Hive,Hiveql,例:输入 ID Col1 Col2 Col3 -- ---- ---- ---- 1 a a sql 2 a a hive 发出 ID Col1 Col2 Col3 -- ---- ---- ---- 1 a a sql 这里我的id值和Col3值是唯一的,但我需要根据min id进行筛选并填充所有记录 我知道下面的方法是可行的,但除此之外的任何最好的方法

例:输入

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

ID   Col1   Col2   Col3
--   ----   ----   ----
1       a     a     sql  
这里我的id值和Col3值是唯一的,但我需要根据min id进行筛选并填充所有记录

我知道下面的方法是可行的,但除此之外的任何最好的方法请建议

按Col1、Col2从表组中选择Col1、Col2、min(ID)


然后在ID、Col1、Col2上加入这个我想你想要
行号()


我想您想要
行号()


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

内部查询选择所有表数据,并按ID的顺序建立递增计数器。它可以基于任何列,最小ID(在本例中)为行号1。如果您想要最大值,
按ID desc下单


如果您想为另一列的不同值重新启动该数字(例如,您的10个Col3为“sql”,20行为“hive”),您可以说是按Col3按id排序的分区,并且该行号将是一个计数器,它为Col3的相同值递增,对于col3的每个不同值,从1重新启动,似乎配置单元支持行数。虽然我从未使用过hive,但其他rdbms会这样使用它来获取min行的全部内容,而无需加入(如果存在重复的最小值,则不会出现问题)

内部查询选择所有表数据,并按ID的顺序建立递增计数器。它可以基于任何列,最小ID(在本例中)为行号1。如果您想要最大值,
按ID desc下单

如果您想为另一列的不同值重新启动该编号(例如,您的10个Col3为“sql”,20行为“hive”),您可以说是按Col3按id排序的分区,并且该行号将是一个计数器,对于Col3的相同值递增,对于Col3的每个不同值从1重新启动

select t.*
from (select t.*, row_number() over (partition by col1, col2 order by id) as seqnum
      from t
     ) t
where seqnum = 1
SELECT a.* FROM 
(
  SELECT *, ROW_NUMBER() OVER(ORDER BY id) rn FROM yourtable
) a
WHERE a.rn = 1