所以…
我有一个表(我们称之为数据位置),例如…
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和位置类型)的“状态”列更新为“无效”,但该最新条目除外.我有一个查询,可以识别符合重复条件的行,但是我不确定如何将分组依据与最大(或最大)组合并更新.似乎可以通过分区来解决问题,但是我对查询有点生疏,因此感谢您的帮助.因此,对于以上数据,我希望结果是…
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