用sql实现从A到B,从A到C
从A到B,我们可以看出B是将相同的name进行了聚合并且id取最大的,首先我们想到开窗函数。假设表A为test
select max_id,group_concat(name SEPARATOR '|') from (
select id,name,max(id) over(partition by name) as max_id from test
)t group by max_id
实现如下:
从A到C的实现,我们首先观察可以发现id为1到3 的先进行了聚合并对name进行了拼接,随后id为4和5的分别进行聚合,因为各自只有一个对应的name,id为6和7的name相同所以对name进行拼接。
select max_id,group_concat(name SEPARATOR '|') as namconcat from (
select name,tt,max(id)over(partition by tt) as max_id from(
select id
,name
,sum(if (name!= lagname , 1,'0')) over(order by cast(id as SIGNED)) as tt
from(
select id
,name
,lag(name,1,'00') over(order by cast(id as SIGNED)) as lagname from test_20230817
)t
)s
)p
group by 1
结果如下: