使用SQL窗口函数将分组首行运行名填充到同组所有行
正确SQL实现方案
你原来的代码做了分组首尾行过滤,所以只能拿到每个ID的两行数据,要实现全部分组行填充首行日志作为NAME,使用FIRST_VALUE()窗口函数即可,该函数可以返回每个ID分区下排序后的第一个值,直接作为新增的NAME字段即可。
方案1:直接使用首行完整LOG作为NAME
select ID, LOG, FIRST_VALUE(LOG) over (partition by ID order by LOG asc) as NAME from combined order by ID, LOG asc;
方案2:提取Begin run 'xxx'中的任务名作为NAME
不同数据库的正则提取函数略有差异,以下以MySQL为例,提取单引号包裹的任务名称:
select ID, LOG, REGEXP_SUBSTR( FIRST_VALUE(LOG) over (partition by ID order by LOG asc), '''([^'']+)''', 1, 1, null, 1 ) as NAME from combined order by ID, LOG asc;
注意:如果你的表中有日志生成时间、日志序号这类字段,建议把窗口函数中
order by LOG替换为对应的时序字段,避免LOG内容排序和实际运行顺序不一致导致取值错误。
内容的提问来源于stack exchange,提问作者Pythonuser11112
相关产品推荐
相关产品推荐

