2012-04-09 98 views
2

我期待通過平均距離該行之後最近的id和最近的id的日期來更新date列爲NULL的行。用於平均缺失日期的MySQL

在下面的數據,這將更新ID 26行是2011-10-19

什麼MySQL的聲明將做到這一點?


其他注意事項:

的數據看起來是這樣的:

id  date   title 
-------------------------------------------- 
12  2011-09-01  Example One 
23  2011-10-02  Example Two 
26  NULL   Example Three 
27  2011-11-05  Example Four 
29  2012-01-05  Example Five 
37  NULL   Example Six 
38  2012-02-03  Example Seven 
-------------------------------------------- 

我寧願不使用的過程。

到目前爲止,我已經有了...

UPDATE `table` 
    SET `date`= 
     (AVG(
       (SELECT `date` FROM `table` WHERE `id`< ID_OF_PARENT_QUERY AND `date` IS NOT NULL LIMIT 1), 
       (SELECT `date` FROM `table` WHERE `id`> ID_OF_PARENT_QUERY AND `date` IS NOT NULL LIMIT 1) 
     )) 

    WHERE `date` IS NULL 
+0

你可以有多個連續的'NULL'值嗎?如果是這樣的話,你會如何繼續? – 2012-04-09 06:23:07

+0

@MostyMostacho - 是的。我想找到最接近的行(通過唯一的ID),在那裏設置了「日期」值。 – DesignerGuy 2012-04-09 06:24:45

回答

4
UPDATE tableX AS t 
    JOIN tableX AS next 
    ON next.id = 
     (SELECT MIN(n.id) 
     FROM tableX AS n 
     WHERE n.id > t.id 
      AND n.dateX IS NOT NULL 
     ) 
    JOIN tableX AS prev 
    ON prev.id = 
     (SELECT MAX(p.id) 
     FROM tableX AS p 
     WHERE p.id < t.id 
      AND p.dateX IS NOT NULL 
     ) 
SET t.dateX = prev.dateX + INTERVAL (DATEDIFF(next.dateX, prev.dateX)/2) DAY 
WHERE t.dateX IS NULL 
+1

+1爲完美的解決方案 – diEcho 2012-04-09 06:52:59