sql >> データベース >  >> RDS >> Mysql

増分された日付でレコードを更新するMySQLクエリ

    試してみてください

    UPDATE Table1 t1 JOIN
    (
      SELECT id, @n := @n + 1 rnum
        FROM Table1 CROSS JOIN (SELECT @n := 0) i
       WHERE date IS NULL
       ORDER BY id
    ) t2 ON t1.id = t2.id CROSS JOIN
    (
      SELECT MAX(date) date FROM Table1
    ) q
       SET t1.date = q.date + INTERVAL t2.rnum DAY
    

    結果:

    |    ID |       DATE |
    ----------------------
    | 10500 | 2013-08-18 |
    | 10501 | 2013-08-16 |
    | 10502 | 2013-08-17 |
    | 10503 | 2013-08-19 |
    | 10504 | 2013-08-20 | --  date has been assigned
    | 10505 | 2013-08-21 | --  date has been assigned
    

    これがSQLFiddle です。 デモ

    説明:エイリアスt2のサブクエリで、日付がNULLであるすべての行を取得し、idで並べ替えます。 残念ながら、MySqlにはROW_NUMBER()の実装がありません。 関数なので、ユーザー変数@nを使用して実行します これは、行が選択されている間にインクリメントされます。この変数を初期化するには、エイリアスiを持つサブクエリを使用します 。そして、CROSS JOINを使用します サブクエリt2で使用できるようにします 。次に、同じ手法を使用します(CROSS JOIN )テーブルの最大日付を取得し、JOINのすべての行で使用できるようにします 。行番号を追加するだけで、日数を表すことができたら、それを最大日付に追加して、dateに割り当てます。 表の列。



    1. Access2019でオンスクリーンツールを使用する方法

    2. 一般的なエラー:1615プリペアドステートメントを再準備する必要があります

    3. 67108864バイトの許容メモリサイズが使い果たされました

    4. MySQL挿入行、重複時:サフィックスを追加して再挿入