MYSQL QUERY replace NULL value in a row with average values -
MYSQL QUERY replace NULL value in a row with average values -
i'm using mysql database store huge amount of satellite data, , these datasets has many data-gaps. replace null values 1 hour(or less) average around point. far i've found how replace null value previous known value:
update mytable set number = (@n := coalesce(number, @n)) order date; from post: sql query replace null value in row value previous known value
my table looks like
+---------------------+--------+ | date | p_f | +---------------------+--------+ | 2001-01-01 20:20:00 | 1.88 | | 2001-01-01 20:25:00 | null | | 2001-01-01 20:30:00 | null | | 2001-01-01 20:35:00 | 1.71 | | 2001-01-01 20:40:00 | null | | 2001-01-01 20:45:00 | null | | 2001-01-01 20:50:00 | null | | 2001-01-01 20:55:00 | 1.835 | | 2001-01-01 21:00:00 | 1.918 | | 2001-01-01 21:05:00 | 1.968 | | 2001-01-01 21:10:00 | 2.004 | | 2001-01-01 21:15:00 | 1.924 | | 2001-01-01 21:20:00 | 1.8625 | | 2001-01-01 21:25:00 | 1.94 | | 2001-01-01 21:30:00 | 2.0375 | | 2001-01-01 21:35:00 | 1.912 | i'd replace null values average values around datetime. instance i'd replace ,
| 2001-01-01 20:50:00 | null | with average around
select avg(p_f) table date between '2001-01-01 20:30' , '2001-01-01 21:10'; paul
not elegant admit should want.
i'm not sure how want handle null values have hr average of null. in illustration below these updated -1.
create table mytable (mydate datetime not null, p_f decimal(10,5) default null ); insert mytable(mydate,p_f) values ('2001-01-01 20:20:00',1.88); insert mytable(mydate,p_f) values ('2001-01-01 20:25:00',null); insert mytable(mydate,p_f) values ('2001-01-01 20:30:00',null); insert mytable(mydate,p_f) values ('2001-01-01 20:35:00',1.71); insert mytable(mydate,p_f) values ('2001-01-01 20:40:00',null); insert mytable(mydate,p_f) values ('2001-01-01 20:45:00',null); insert mytable(mydate,p_f) values ('2001-01-01 20:50:00',null); insert mytable(mydate,p_f) values ('2001-01-01 20:55:00',1.835); insert mytable(mydate,p_f) values ('2001-01-01 21:00:00',1.918); insert mytable(mydate,p_f) values ('2001-01-01 21:05:00',1.968); insert mytable(mydate,p_f) values ('2001-01-01 21:10:00',2.004); insert mytable(mydate,p_f) values ('2001-01-01 21:15:00',1.924); insert mytable(mydate,p_f) values ('2001-01-01 21:20:00',1.8625); insert mytable(mydate,p_f) values ('2001-01-01 21:25:00',1.94); insert mytable(mydate,p_f) values ('2001-01-01 21:30:00',2.0375); insert mytable(mydate,p_f) values ('2001-01-01 21:35:00',1.912); insert mytable(mydate,p_f) values ('2001-01-02 20:40:00',null); -- insert re-create of null value p_f rows mytable 1 hr average mydate insert mytable (mydate,p_f) select t.mydate,ifnull((select avg(p_f) mytable t1 t1.mydate between t.mydate - interval 1 hr , t.mydate +interval 1 hour),-1) houravg mytable t t.p_f null; -- delete rows p_f null delete mytable p_f null; mysql
Comments
Post a Comment