這是我的表 MySQL 5.5.62 主機版
| 用戶識別碼 | Next_control | Next_control_2 | 日期警報 |
|---|---|---|---|
| 45265 | 2023-09-07 | 2023-07-07 | 無效的 |
| 45265 | 2022-12-16 | 2022-10-16 | 無效的 |
| 45265 | 2019-04-19 | 2019-02-19 | 無效的 |
| 45265 | 2016-09-18 | 2016-07-18 | 無效的 |
| 45265 | 2014-11-23 | 2014-09-23 | 無效的 |
| 45265 | 2009-08-11 | 2009-06-11 | 無效的 |
我需要更新Date_alert日期少于兩個月的列,而該列僅適用于45265Next_control的最新行uID
我努力了
UPDATE `dotable` q JOIN
(SELECT uID, MAX(Next_control) dt FROM `dotable` GROUP BY uID) t
SET q.Date_alert = DATE_SUB( t.dt, INTERVAL 2 MONTH )
WHERE q.uID = t.uID;
但Date_alert它的列也會更新為uID45265 的舊行:
| 用戶識別碼 | Next_control | Next_control_2 | 日期警報 |
|---|---|---|---|
| 45265 | 2023-09-07 | 2023-07-07 | 2023-07-07 |
| 45265 | 2022-12-16 | 2022-10-16 | 2023-07-07 |
| 45265 | 2019-04-19 | 2019-02-19 | 2023-07-07 |
| 45265 | 2016-09-18 | 2016-07-18 | 2023-07-07 |
| 45265 | 2014-11-23 | 2014-09-23 | 2023-07-07 |
| 45265 | 2009-08-11 | 2009-06-11 | 2023-07-07 |
預期輸出:
| 用戶識別碼 | Next_control | Next_control_2 | 日期警報 |
|---|---|---|---|
| 45265 | 2023-09-07 | 2023-07-07 | 2023-07-07 |
| 45265 | 2022-12-16 | 2022-10-16 | 無效的 |
| 45265 | 2019-04-19 | 2019-02-19 | 無效的 |
| 45265 | 2016-09-18 | 2016-07-18 | 無效的 |
| 45265 | 2014-11-23 | 2014-09-23 | 無效的 |
| 45265 | 2009-08-11 | 2009-06-11 | 無效的 |
任何幫助都非常感謝。
uj5u.com熱心網友回復:
我需要更新 Date_alert 列,其日期少于兩個月,而 Next_control 列僅適用于 uID 45265 的最新行
UPDATE dotable
SET Date_alert = dt - INTERVAL 2 MONTH
WHERE uID = 45265
ORDER BY dt DESC LIMIT 1
uj5u.com熱心網友回復:
還有一個選擇是在您的WHERE子句中添加一個條件,您可以在其中檢查匹配的“ Next_control ”值。
UPDATE `dotable` q JOIN
(SELECT uID, MAX(Next_control) dt FROM `dotable` GROUP BY uID) t
SET q.Date_alert = DATE_SUB( t.dt, INTERVAL 2 MONTH )
WHERE q.uID = t.uID AND q.Next_control = t.dt;
在此處查看演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516988.html
標籤:mysqlsql
下一篇:如何根據引數條件聯合所有特定表
