Hive 配置单元-如何为每个匹配选择前N个元素 请考虑以下表格中的蜂巢表。

Hive 配置单元-如何为每个匹配选择前N个元素 请考虑以下表格中的蜂巢表。,hive,hiveql,Hive,Hiveql,当我们想要获得与where子句中的条件匹配的所有行时,这种基本SQL语法可以很好地工作。对于where子句的每个匹配项,我想将返回的行限制为一个数字,比如N 让我举例说明: 一, 考虑这个表: TableA c1 c2 1. a 1 b 1 c 2. d 2. e 2. f 2考虑此查询: SELECT c1, c2 FROM TableA WHERE c1 in (1,2) 3正如你所想象的,它会产生这样的结果: Actual Results: c1 c2 1.

当我们想要获得与where子句中的条件匹配的所有行时,这种基本SQL语法可以很好地工作。对于where子句的每个匹配项,我想将返回的行限制为一个数字,比如N

让我举例说明:

一, 考虑这个表:

TableA
c1 c2
1.  a
1   b 
1   c 
2.  d
2.  e
2.  f

2考虑此查询:

SELECT c1, c2 
FROM TableA 
WHERE c1 in (1,2)
3正如你所想象的,它会产生这样的结果:

Actual Results:
c1 c2
1.  a
1   b 
1   c  
2.  d
2.  e
2.  f
四, 预期结果:

c1 c2
1.  a
1   b   
2.  d
2.  e
问题:如何修改2中的查询以获得4中提到的所需输出。

对于c1,只有2个值

SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2
超过2个值,请使用秩

c1只有2个值

SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2
超过2个值,请使用秩

您可以使用row_number函数来执行此操作

select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum 
      FROM TableA
      --add a where clause as needed
     ) t 
where rnum <= 2 
您可以使用row_number函数来执行此操作

select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum 
      FROM TableA
      --add a where clause as needed
     ) t 
where rnum <= 2