2016-12-05 6 views
2

まず、mysqlの制限内でこれが可能かどうかはわかりません。とにかく私はそれを投稿します。テーブルフィールドの値を隣接行で更新する

私はiddateのテーブルを持っているとしましょう。しかし何らかの理由により、日付の一部が表に欠落していました。私が基本的に必要とするのは、行方不明の日付を隣接行の日付値で更新することです。私はID 1001ため欠落日付値を更新するためにいくつかのルールを持っている上記の例によれば

+-----------+---------------------+ 
|  id |  date   | 
+-----------+---------------------+ 
| 1000 | 2016-11-22 11:57:59 | 
| 1001 | NULL    | 
| 1002 | 2016-11-22 12:17:41 | 
| 1003 | 2016-11-22 13:09:24 | 
| 1004 | 2016-11-22 22:40:31 | 
| 1005 | 2016-11-22 13:59:40 | 
| 1006 | NULL    | 
| 1007 | NULL    | 
| 1008 | 2016-11-22 15:10:29 | 
| 1009 | 2016-11-22 22:40:31 | 
+-----------+---------------------+ 

、ベローズとして1006 & 1007

  1. 欠けている日付がある場合は、常に上のレコードで更新する必要があります。例:1001は、1000の日付値で更新されます。2016-11-22 11:57:59
  2. レコードの更新はid acsの順番で行う必要がありますので、上記の行に値がないことに問題はありません。初期には欠落していても前に更新されるにもかかわらず、たとえば:10071006が最初に欠落していますが、1005で更新される場合、1007になると、すでに1006に値があります。最終的には両方の1006 & 10072016-11-22 13:59:40

である1005日付値を持っているが、私ははっきりと問題を説明し、しかし、まだ私は、これは純粋なmysqlクエリで可能であるかわからない願っています。

答えて

1

これは実際には、mysqlが更新と結合を使用することで可能です。しかし、連続したヌルがあるので、複数回クエリを実行する必要があります。

UPDATE empties e1, empties e2 set e1.`date` = e2.`date` 
WHERE e1.`date` IS NULL and e1.id = e2.id+1; 

id = 1007に割り当てられた値は、id = 1006がNULLになる行の値であることに注意してください。したがって、これらのヌルを修正するには2番目の反復が必要です。

ps:あなたのテーブル名が何であっても空に変更してください。

関連する問題