我需要更新User
表记录,其中max endDate替换为值为null的用户。 null将指示特定用户记录是当前记录。解释:此表跟踪每个用户的时间变化。这就是我现在正在做的事情。它可以工作,但CONCAT可能是密集的。还有另外一种比这更快的方法吗?游标肯定比较慢。已经试过了。
db是mysql
USE CUSTOMER;
CREATE TEMPORARY TABLE IF NOT EXISTS keyValuePairs
SELECT `user`, MAX(endDate)as mEndDate FROM `User` GROUP BY `user`;
UPDATE `User` SET `endDate` = NULL
WHERE CONCAT(`user`, `endDate`) IN
(SELECT CONCAT(`user`, `mEndDate`) FROM keyValuePairs);
答案 0 :(得分:1)
更快,你可以避免制作一个不必要的临时表:
UPDATE `User` u
LEFT JOIN `User` maxUser ON u.user = maxUser.user AND maxUser.endDate > u.endDate
SET u.`endDate` = NULL
WHERE maxUser.user IS NULL;
对于没有相应用户行且具有更大endDate
的用户行,这将把endDate设置为NULL - 这将是该用户的最大endDate。
使用SQLFiddle here。
答案 1 :(得分:0)
更快的方法是不使用功能。尝试这样的事情:
update user
set enddate = null
from user u join keyvaluepairs k on u.user = k.user
and u.enddate = k.menddate