删除两列匹配的地方

Delete where both columns match

我有两个table

Person (contain oldest date (farthest in future) when person moved OR WILL moved to another address)

ID                OLDESTADDRESSMOVEDATE

1                     20161117
2                     20171211
3                     20160101


Address           

PersonID             AddressMOVETODATE
 1                       20161117
 1                       20161111
 1                       20141018
 2                       20171211
 2                       20151210

现在我想编写一个 DELETE 查询,该查询将为 PERSON 中的每个人从 ADDRESS THE ROWS 中删除,其中 AddressMOVETODATE 比 OLDESTADDRESSMOVEDATE 列中的那个更早

例如

如果我运行查询ADDRESStable中剩余的行应该是

PersonID             AddressMOVETODATE
1                       20161117
2                       20171211

我试过了

DELETE FROM ADDRESS WHERE PERSONID = PERSON.ID and AddressMOVETODATE < Person.OLDESTADDRESSMOVEDATE

但它不起作用。此外,我们将如何确保只输入 Person table 的 CORRESPONDING 列,例如我们不想把

搞砸

Person ID = 1 and Person.OLDESTADDRESSMOVEDATE = 20171211 (of Person 2)

请帮忙。

谢谢,

艾登

您可以使用 row_number、cte 和 delete 进行查询

;WITH cte AS
(
    SELECT *, RowN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY AddressMoveDate DESC) FROM Address
)
DELETE FROM cte WHERE RowN > 1