从序列中为配置单元中的每个值查找缺失的数字
Posted
技术标签:
【中文标题】从序列中为配置单元中的每个值查找缺失的数字【英文标题】:Find missing number from a sequence for each value in hive 【发布时间】:2020-05-09 14:33:54 【问题描述】:我有一张如下表-
User-id | sequence
1 0
1 1
1 2
2 1
3 2
这里 0 1 和 2 是用户最多可以拥有的固定序列,现在我想要一个标志为 N,其中任何序列都缺少用户,否则标志应该是 Y。我可以说输出应该像 -
1 0 Y
1 1 Y
1 2 Y
2 0 N
2 1 Y
2 2 N
3 0 N
3 1 N
3 2 Y
【问题讨论】:
【参考方案1】:选择不同的user_id,与序列(0、1、2)交叉连接以获取所有用户+序列组合,与您的表左连接以计算标志
select us.user_id,
us.sequence,
case when t.user_id is null then 'N' else 'Y' end flag
from
(--all user sequence combinations
select u.user_id, s.sequence
from (select distinct user_id from mytable) u
cross join (select stack (3, 0, 1, 2) as sequence) s
) us --all user+sequence
left join mytable t on us.sequence=t.sequence and us.user_id=t.user_id
order by us.user_id, us.sequence;
演示与您的数据示例:
with
mytable as ( --use your table instead of this
select stack(5,
1, 0,
1, 1,
1, 2,
2, 1,
3, 2) as (user_id,sequence)
)
select us.user_id,
us.sequence,
case when t.user_id is null then 'N' else 'Y' end flag
from
(--all user sequence combinations
select u.user_id,
s.sequence
from (select distinct user_id from mytable) u
cross join (select stack (3, 0, 1, 2) as sequence) s
) us --all user+sequence
left join mytable t on us.sequence=t.sequence and us.user_id=t.user_id
order by us.user_id, us.sequence;
结果:
user_id sequence flag
1 0 Y
1 1 Y
1 2 Y
2 0 N
2 1 Y
2 2 N
3 0 N
3 1 N
3 2 Y
【讨论】:
以上是关于从序列中为配置单元中的每个值查找缺失的数字的主要内容,如果未能解决你的问题,请参考以下文章