2016-11-12 2 views
0

У меня есть две таблицУдалить, где оба столбца совпадает

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 

Теперь я хочу написать УДАЛИТЬ запрос, который будет УДАЛИТЬ ИЗ АДРЕСА рядов для каждого человека в лице, где AddressMOVETODATE является ПРЕДЫДУЩИМ чем в OLDESTADDRESSMOVEDATE Colum

eg

Если я запускаю этот запрос остальные строки в таблице адресов должны быть

PersonID    AddressMOVETODATE 
1      20161117 
2      20171211 

Я попытался

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

, но он не работает. Кроме того, как мы будем уверены, что мы вводим только столбцы CORRESPONDING таблицы Person, например. мы не хотим испортить, поставив

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

Пожалуйста, помогите.

Спасибо,

Эйден

+0

Может быть с помощью курсора или INNER JOIN – Aiden

+1

Пожалуйста, не вводите свой заголовок вопроса в ALL CAPS. Это считается ОБРАЩЕНИЕ здесь, как и везде в Интернете. Он не даст вам ответов раньше, это затрудняет чтение текста, и это действительно грубо и раздражает. Пожалуйста, будьте вежливы; есть клавиши Shift на обеих сторонах клавиатуры, чтобы они были легко доступны, потому что текст, который правильно обсажен, легче читать и понимать. Благодарю. –

+0

Ой, извините, не сделайте это снова – Aiden

ответ

1

Вы можете запросить с помощью row_number, КТР и удалять

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

Нет необходимости добавлять Person.ID в ID из вышеприведенного? Как он узнает, что идентификатор приходит от Человека, когда он не упоминал об этом? Мы также не используем OLDESTADDRESSMOVEDATE, почему. – Aiden

+0

Можно ли это сделать без НАВЕРХ и РАЗДЕЛА? – Aiden

+0

WOW. хорошая логика, но она дает некоторую ошибку. Неправильный синтаксис рядом с ключевым словом «ORDER». – Aiden

Смежные вопросы