hivesql获取用户当前订单的下一订单号-mark

很多业务场景下都需要获取用户当前订单的下一订单信息,例如淘宝和京东的订单的下一订单,滴滴打车司机的下一单号。或者浏览场景下,用户浏览商品的顺序等等。
样例数据1:表名order_info

useridorderidordertimeorderinfo
1100002017-01-14 12:25:56手机
1100012017-01-17 11:05:23手机壳
1100022017-01-20 10:05:28瓜子
2100032017-01-14 12:25:56电脑
2100042017-01-17 11:05:23瓜子
3100052017-01-20 10:05:28手机

目标输出:

useridorderidordertimeorderinfonext_orderidnext_ordertimenext_orderinfo
1100002017-01-14 12:25:56手机100012017-01-17 11:05:23手机壳
1100012017-01-17 11:05:23手机壳100022017-01-20 10:05:28瓜子
2100032017-01-14 12:25:56电脑100042017-01-17 11:05:23瓜子

sql分析:目标是以用户分组,拿到当前用户订单后面所有订单信息,按照下单时间排序,取得时间差最小的那一个订单信息。

select
	t.userid,
	t.orderid,
	t.ordertime,
	t.orderinfo,
	t.next_orderid,
	t.next_ordertime,
	t.next_orderinfo
from
	(
		select
			a.userid,
			a.orderid,
			a.ordertime,
			a.orderinfo,
			b.orderid as next_orderid,
			b.ordertime as next_ordertime,
			b.orderinfo as next_orderinfo,
			row_number() over(partition by a.userid, a.orderid
			 order by unix_timestamp(b.ordertime) - unix_timestamp(a.ordertime) asc) as seq_rank
		from
			(
				select userid, orderid, ordertime, orderinfo from order_info
			)
			a
		JOIN
			(
				select userid, orderid, ordertime, orderinfo from order_info
			)
			b
		on
			a.userid = b.userid
		where
			a.ordertime < b.ordertime
	)
	t
where
	t.seq_rank = 1

通过seq_rank 控制不仅可以拿到下一单还可以拿到下下单,下K单等等。
可以作为类似于n-gram算法的数据源。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值