所以...
我有一个表(我们称之为数据位置),就像...
Data Location ID Data ID Location Type Location URL Status Date
1 1 Foo foo/3 Valid 10-21-2014
2 1 Bar bar/1 Valid 10-21-2014
3 1 Foo foo/2 Valid 03-20-2013
4 1 Foo foo/1 Valid 12-01-2010
……等等。该表有许多不同的数据 ID(为简单起见,我没有显示它们)。这个想法是,给定的数据 ID 和位置类型应该只有 1 个有效条目,正如您在上面看到的,数据 ID 1 的所有 Foo 位置都是有效的(foo/1、foo/2、foo/3) .
有人可以帮我构建一个查询,将所有重复记录(相同的数据 ID 和位置类型)的状态列更新为无效,除了最新的条目。我有一个查询可以识别符合重复条件的行,但我不确定如何将 group by 与 max(或不是 max?)结合起来并更新。似乎分区方式可能是这样,但我对查询有点生疏,所以我很感激任何帮助。所以对于上面的数据,我希望结果是......
Data Location ID Data ID Location Type Location URL Status Date
1 1 Foo foo/3 Valid 10-21-2014
2 1 Bar bar/1 Valid 10-21-2014
3 1 Foo foo/2 Invalid 03-20-2013
4 1 Foo foo/1 Invalid 12-01-2010
...提前致谢!
最佳答案
您可以使用一个 UPDATE 语句:
UPDATE Data_Location u
INNER JOIN (
SELECT `Data ID`, `Location Type`, MAX(`Date`) AS max_date
FROM Data_Location
GROUP BY `Data ID`, `Location Type`
) t ON u.`Data ID` = t.`Data ID`
AND u.`Location Type` = t.`Location Type`
SET u.Status = 'Invalid'
WHERE u.`Date` <> t.max_date
关于MySQL 查询更新除最新行之外的所有 "duplicate"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495121/