MySQL查询更新除最新的行以外的所有“重复”行

所以…

我有一个表(我们称之为数据位置),例如…

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

测试SQL Fiddle

上一篇:java-如何从Connection对象确定DBMS


下一篇:SQL-W3School-高级:SQL 数据库