Hive查询某一重复字段记录第一条数据

在数据库中存在id、toapp、topin、toclienttype字段相同的多条记录,通过row_number() OVER (PARTITION BY COL1 ORDER BY COL2)窗口函数,可以按特定字段对这些重复记录进行分组并排序,选取每组中receivetime最小的一条记录,从而实现需求。示例展示了在员工表中按照部门deptid对薪水salary进行降序排序,获取每个部门薪水最高的员工。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:数据库中id、toapp、topin、toclienttype几个字段都相同,receivetime字段不一样,现需要将receive最小的一行查出,其他行舍去。

select
	*
from
	(
		select
			*,
			row_number() over(partition by id order by receivetime asc) num
		from
			xxxxxxxxxxxxxxxxxxxx
		where
			dt = '2019-01-14'
			and toapp = 'xxxxxx'
			and toclienttype = 'xxxxxx'
			and msgrectype = '1'
			and systemtime is not null
	) as t
where
	t.num = 1

这里主要的代码就是row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 

这行代码的意思是先对COL1列进行分组,然后按照COL2进行排序,row_number()函数是对分组后的每个组内记录按照COL2排序标号,我们最后取的时候就拿标号为1的一条记录,即达到我的需求。

例子:

empid       deptid      salary
----------- ----------- ---------------------------------------
1           10          5500.00
2           10         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值