gpt4 book ai didi

MySQL:将所有日期向前移动,因此最大日期=现在

转载 作者:行者123 更新时间:2023-11-29 07:11:40 28 4
gpt4 key购买 nike

这是我的 结果 MySQL 表的示例:

enter image description here

我想将特定用户的所有日期向前移动相同的时间间隔,以便该用户的最高日期是当前时间戳。我知道如何获取以天为单位的间隔:

/* 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),它也会面临将最大记录转移到 future 的风险。我希望新的最大值是当前日期时间

SQL Fiddle

最佳答案

您可以使用两个连续的语句来完成此操作。

SELECT @offset := DATEDIFF(
CURDATE(),
(SELECT MAX(LastReviewed)
FROM results
WHERE UserID = 1)
);
UPDATE results
SET LastReviewed = LastReviewed + INTERVAL @offset DAY
WHERE UserID = 1;

编辑哦,你必须为每个人做这件事,是吗?让我们使用临时表。 (当你处理完这些家伙后,他们就会消失。)

 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;

临时表为每个用户包含一行。它克服了您无法在更新表的更新语句中执行汇总查询(在您的情况下为 MAX())的限制。

关于MySQL:将所有日期向前移动,因此最大日期=现在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476755/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com