tabA
filed1 filed2 filed3 filed4
f1Va null null f4Va
f1Va null f3Vb null
f1Va f3Vc null null需求:
1、找出filed1内容相同
2、将任意一行null的字段,填上其他行,同列的非null的字段
3、保留填充完整的行,删除其他提供数据的行
上述数据希望返回:
filed1 filed2 filed3 filed4
f1Va f3Vc f3Vb f4Va解释:
第一步:找到filed1相同的内容,有三条
f1Va null null f4Va
f1Va null f3Vb null
f1Va f3Vc null null第二步:
第一条记录的filed2字段为null,找到第三条记录的filed2字段非空,然后用该字段填充第一行中filed2字段
第一条记录的filed3字段为null,找到第二条记录的filed2字段非空,然后用该字段填充第一行中filed3字段
第一条记录的filed4字段非null,不处理第三步:
删除第二条记录和第三条记录,保留第一条记录。
我采用大家提供的方法:select f1, max(f2), max(f3), max(f4) from tabA group by f1;然后100w的数据量,执行了6个小时还没出结果,就放弃了,不知道是为什么?是否需要建立索引或者其他优化?不知道现在该怎么办?
filed1 filed2 filed3 filed4
f1Va null null f4Va
f1Va null f3Vb null
f1Va f3Vc null null需求:
1、找出filed1内容相同
2、将任意一行null的字段,填上其他行,同列的非null的字段
3、保留填充完整的行,删除其他提供数据的行
上述数据希望返回:
filed1 filed2 filed3 filed4
f1Va f3Vc f3Vb f4Va解释:
第一步:找到filed1相同的内容,有三条
f1Va null null f4Va
f1Va null f3Vb null
f1Va f3Vc null null第二步:
第一条记录的filed2字段为null,找到第三条记录的filed2字段非空,然后用该字段填充第一行中filed2字段
第一条记录的filed3字段为null,找到第二条记录的filed2字段非空,然后用该字段填充第一行中filed3字段
第一条记录的filed4字段非null,不处理第三步:
删除第二条记录和第三条记录,保留第一条记录。
我采用大家提供的方法:select f1, max(f2), max(f3), max(f4) from tabA group by f1;然后100w的数据量,执行了6个小时还没出结果,就放弃了,不知道是为什么?是否需要建立索引或者其他优化?不知道现在该怎么办?
在F1上建立索引没有
1,看到了有using filesort这样的描述,那么可能是排序缓存不够了,sort_buffer_size参数设置大点试试看。2,大数据量操作,一定会用到参数tmp_table_size,你试试把这个参数调整大。一般8G的内层可以设置为1024M。