数据开发有很多有趣的挑战,今天我们来看一个问题:
如图所示,初始表8行,第2/5/6行是空值,需要使用上面最近一个值进行填充。这个表按id从小到大排序的,且保证第一行value一定不是空值。
让我们先思考5分钟再看解法
任务目标,左侧value列空值用上方最近一个值填充
解法思路
直接上一种解法思路
- 把原表value为空的全部过滤掉,构造出一张顺序表,包含序号group字段和value字段,我们就得到一张绿色映射表。
- 我们再构造一张分组标签表,把第一行标记为第一组,如果之后的行value为空,则组号相同。如果遇到不为空的行,则group 1 处理,得到蓝色的分组表。
- 将蓝色表的group字段和绿色表的group字段做join,就能取到正确的value值了。
以下在阿里云的dataworks上做SQL实现
sql实现
大家在工作中有什么困难场景可以拿出来交流