Teradata按某字段分组,排序后,取每组第一条记录

创建临时测试表脚本如下:

CREATE MULTISET VOLATILE TABLE temprecommend 
     (
      item_id DECIMAL(18,0),
      rankScore DECIMAL(3,2),
      sourcingTaskId BYTEINT
	  )
PRIMARY INDEX ( item_id )
ON COMMIT PRESERVE ROWS;

初始化数据脚本如下:

insert into temprecommend (item_id,rankScore,sourcingTaskId) values(152241683582,7.50,116);
insert into temprecommend (item_id,rankScore,sourcingTaskId) values(152241683581,7.10,116);
insert into temprecommend (item_id,rankScore,sourcingTaskId) values(152055889769,7.30,115);
insert into temprecommend (item_id,rankScore,sourcingTaskId) values(152004277613,7.20,115);
insert into temprecommend (item_id,rankScore,sourcingTaskId) values(152241683585,7.40,116);

SQL 如下:

select * from 
(select row_number() over (partition by sourcingtaskid order by rankscore desc) as num,item_id,rankScore,sourcingTaskId
 from temprecommend) as data
where data.num = 1

解释:1.下面一句实现按sourcingtaskid分组,并按rankscore 排序

select row_number() over (partition by sourcingtaskid order by rankscore desc) as num,item_id,rankScore,
sourcingTaskId from temprecommend

效果下图:
在这里插入图片描述
2. 下面一句实现从所有分组中只取第一条记录

select * from 
(select row_number() over (partition by sourcingtaskid order by rankscore desc) as num,item_id,rankScore,sourcingTaskId
 from temprecommend) as data
where data.num = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值