我有一个场景,其中我的表包含伪数据
特定数据重复多次,只需要提取前两次出现的
表中的数据采用以下格式
TAB_A | TAB_B
AB | 12
AB | 12
AB | 2131
CF | 12313
CF | 13
CF | 45
MG | 424
MG | 242
MG | 546
VR | 868
VR | 312
VR | 35
VR | 68
我只需要以下格式的输出TAB_A列的前两次出现
TAB_A |TAB_B
AB |12
AB |12
CF |12313
CF |13
MG |424
MG |242
VR |868
VR |312
我尝试了无法实现逻辑的分区方法,甚至尝试了的rownum顺序
您可以使用ROW_NUMBER((,如下所示:
SELECT tab_a, tab_b
FROM (
SELECT t.*, ROW_NUMBER() OVER(PARTITION BY tab_a ORDER BY tab_b) AS row_number
FROM test t) T
WHERE row_number <= 2
在此处查找演示
这应该有效:
select *
from (select TAB_A,TAB_B,
rank() over (partition by TAB_A order by TAB_B) rank
from test)
test
where rank <= 2
请在此处查看小提琴:http://sqlfiddle.com/#!18/eeaee/19