Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql回填数据_Mysql_Sql_Join_Subquery - Fatal编程技术网

使用mysql回填数据

使用mysql回填数据,mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,嗨,我有一张桌子,看起来像这样: Date ID Value 1/1/2011 id1 10 1/2/2011 id1 NULL 1/3/2011 id1 20 1/1/2011 id2 20 1/3/2011 id2 NULL 1/4/2011 id2 30 我的任务是向前填充每个id和日期的值,直到知道一个新值。例如,我想在2011年1月2日为id1插入值10,在2011年1月3日为id2插入值20。我正在使用mysql。在此方面的任何帮助都将不胜感激。在mysql中,我想不出任何超高效的

嗨,我有一张桌子,看起来像这样:

Date ID Value
1/1/2011 id1 10
1/2/2011 id1 NULL
1/3/2011 id1 20
1/1/2011 id2 20
1/3/2011 id2 NULL
1/4/2011 id2 30

我的任务是向前填充每个id和日期的值,直到知道一个新值。例如,我想在2011年1月2日为id1插入值10,在2011年1月3日为id2插入值20。我正在使用mysql。在此方面的任何帮助都将不胜感激。

在mysql中,我想不出任何超高效的方法来实现这一点,但可以使用相关子查询来实现:

UPDATE table 
    SET value = (SELECT value 
                 FROM Table AS T1 
                 WHERE T1.ID = table.ID 
                     and t1.DATE <= table.Date 
                 LIMIT 1)
WHERE table.Value IS NULL; 

这假设我正确地解释了逻辑。让我知道这是否是正确的想法。

是的,这也是我的想法,但在我使用mysql的短暂经验中,子查询似乎在任何合理的时间内都不会返回。。让我来试一试!谢谢您这么快回复我。嗯,看起来我遇到了以下错误:错误1093 HY000:您不能在FROM子句中指定更新的目标表“blah2”。我假设这意味着我的子查询中不能有与我的update子句相同的表?只是复制表来解决这个问题,我们会看看这个东西是否返回。有时候我是多么爱MySQL。子查询不一定不好,但这种类型(必须对每一行进行计算)可能非常糟糕。嗯,还有其他想法吗?看起来这已经运行了大约10个小时了。。。这张桌子只有八百万行。。mysql的速度有点令人失望。