sql题--判断连续问题

题目

在这里插入图片描述

A–>B实现:

-- impala
with data_ as ( 
  select 1 as id, 'aa' as name  
  union all 
  select 2 as id, 'aa' as name  
  union all 
  select 3 as id, 'aa' as name  
  union all 
  select 4 as id, 'd' as name   
  union all 
  select 5 as id, 'c' as name   
  union all 
  select 6 as id, 'aa' as name  
  union all 
  select 7 as id, 'aa' as name  
  union all 
  select 8 as id, 'e' as name   
  union all 
  select 9 as id, 'f' as name   
  union all     
  select 10 as id, 'g' as name  
)   
select
max(id) as id,
group_concat(name,'|') name_
from data_
group by 
name

-- hive
with data_ as ( 
  select 1 as id, 'aa' as name  
  union all 
  select 2 as id, 'aa' as name  
  union all 
  select 3 as id, 'aa' as name  
  union all 
  select 4 as id, 'd' as name   
  union all 
  select 5 as id, 'c' as name   
  union all 
  select 6 as id, 'aa' as name  
  union all 
  select 7 as id, 'aa' as name  
  union all 
  select 8 as id, 'e' as name   
  union all 
  select 9 as id, 'f' as name   
  union all     
  select 10 as id, 'g' as name  
)   
select
max(id) as id,
concat_ws('|', collect_list(name)) name_
from data_
group by 
name

A–>C实现:

--impala
with data_ as (
  select 1 as id, 'aa' as name
  union all
  select 2 as id, 'aa' as name
  union all
  select 3 as id, 'aa' as name
  union all
  select 4 as id, 'd' as name
  union all
  select 5 as id, 'c' as name
  union all
  select 6 as id, 'aa' as name
  union all
  select 7 as id, 'aa' as name
  union all
  select 8 as id, 'e' as name
  union all
  select 9 as id, 'f' as name
  union all 
  select 10 as id, 'g' as name 
)
SELECT
  max(id) as id,
 group_concat(name,'|') AS name_
FROM
  (
    SELECT
      id,
      name,
     (id - row_number() OVER (PARTITION BY name ORDER BY id)) AS grp
    FROM
      data_
  ) subquery
GROUP BY
  grp


-- hive 
with data_ as (
  select 1 as id, 'aa' as name
  union all
  select 2 as id, 'aa' as name
  union all
  select 3 as id, 'aa' as name
  union all
  select 4 as id, 'd' as name
  union all
  select 5 as id, 'c' as name
  union all
  select 6 as id, 'aa' as name
  union all
  select 7 as id, 'aa' as name
  union all
  select 8 as id, 'e' as name
  union all
  select 9 as id, 'f' as name
  union all 
  select 10 as id, 'g' as name 
)
SELECT
  max(id) as id,
 concat_ws(collect_list(name,'|')) AS name_
FROM
  (
    SELECT
      id,
      name,
      (id - row_number() OVER (PARTITION BY name ORDER BY id)) AS grp
    FROM
      data_
  ) subquery
GROUP BY
  grp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值