MySQL:将所有日期向前移动,因此最大日期 = 现在
MySQL: shift all dates forward so max date = now
这是我的示例 results
MySQL table:
我想将特定用户的所有日期向前移动相同的时间间隔,以便该用户的最高日期是当前时间戳。我知道如何获得以天为单位的间隔:
/* result is 823 */
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
但我不知道如何在将日期向前移动的更大查询中使用该信息。我试过:
UPDATE `results` r
SET r.`LastReviewed` =
r.`LastReviewed` +
INTERVAL (
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
) DAY
WHERE r.`UserID` = 1
但是这个错误是:
Error Code 1093: You can't specify target table 'r' for update in FROM clause
第二个问题是,即使它有效,如果它发生在一天结束时(晚上 11:59),它也有将最大记录转移到未来的风险。我希望新的最大值为当前日期时间
你可以用两个连续的语句来完成。
SELECT @offset := DATEDIFF(
CURDATE(),
(SELECT MAX(LastReviewed)
FROM results
WHERE UserID = 1)
);
UPDATE results
SET LastReviewed = LastReviewed + INTERVAL @offset DAY
WHERE UserID = 1;
编辑哦,你必须为每个人做,嗯?让我们使用一个临时的 table。 (这些家伙在你处理完它们后就会消失。)
CREATE TEMPORARY TABLE offsets
SELECT DATEDIFF(CURDATE(),MAX(LastReviewed)) offset,
UserId
FROM results
GROUP BY UserId;
UPDATE results
JOIN offsets ON results.UserId = offsets.UserId
SET results.LastReviewed = results.LastReviewed + INTERVAL offsets.offset DAY;
temp table 包含每个用户一行。它克服了您不能在更新 table.
的更新语句中执行摘要查询(MAX()
在您的情况下)的限制
这是我的示例 results
MySQL table:
我想将特定用户的所有日期向前移动相同的时间间隔,以便该用户的最高日期是当前时间戳。我知道如何获得以天为单位的间隔:
/* result is 823 */
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
但我不知道如何在将日期向前移动的更大查询中使用该信息。我试过:
UPDATE `results` r
SET r.`LastReviewed` =
r.`LastReviewed` +
INTERVAL (
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
) DAY
WHERE r.`UserID` = 1
但是这个错误是:
Error Code 1093: You can't specify target table 'r' for update in FROM clause
第二个问题是,即使它有效,如果它发生在一天结束时(晚上 11:59),它也有将最大记录转移到未来的风险。我希望新的最大值为当前日期时间
你可以用两个连续的语句来完成。
SELECT @offset := DATEDIFF(
CURDATE(),
(SELECT MAX(LastReviewed)
FROM results
WHERE UserID = 1)
);
UPDATE results
SET LastReviewed = LastReviewed + INTERVAL @offset DAY
WHERE UserID = 1;
编辑哦,你必须为每个人做,嗯?让我们使用一个临时的 table。 (这些家伙在你处理完它们后就会消失。)
CREATE TEMPORARY TABLE offsets
SELECT DATEDIFF(CURDATE(),MAX(LastReviewed)) offset,
UserId
FROM results
GROUP BY UserId;
UPDATE results
JOIN offsets ON results.UserId = offsets.UserId
SET results.LastReviewed = results.LastReviewed + INTERVAL offsets.offset DAY;
temp table 包含每个用户一行。它克服了您不能在更新 table.
的更新语句中执行摘要查询(MAX()
在您的情况下)的限制