2

その行の前の最も近いIDとその後の最も近いIDの日付を平均することにより、date列がある行を更新しようとしています。NULL

以下のデータでは、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
4

1 に答える 1

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
于 2012-04-09T06:28:49.277 に答える