您可以根据eligible_riders 中非空值的累积数量来分配组。然后聚合并取最后一个值:
select og.*
from (select order_id, grp, max(eligible_riders) as eligible_riders,
group_concat(rider_id) as riders,
row_number() over (partition by order_id order by min(id) desc) as seqnum
from (select t.*,
sum(eligible_riders <> '') over (partition by order_id order by id) as grp
from t
) t
group by order_id, grp
) og
where seqnum = 1;
嗯。 . .您也可以使用相关子查询来执行此操作,这可能看起来更简单一些:
select order_id, max(eligible_riders) as eligible_riders,
group_concat(rider_id) as riders
from t
where t.id >= (select max(t2.id)
from t t2
where t2.order_id = t.order_id and
t2.eligible_riders <> ''
)
group by order_id;
为了提高性能,您需要在(order_id, eligible_riders) 上建立索引。