删除两列匹配的地方
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
我有两个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