2013-11-14 3 views
2

я могу выбрать информацию для строки (ов) Я хочу обновить, используя эту инструкцию:Обновления несколько строк с максимальной датой для каждого внешнего ключа

select max(Date),F_ID from MyTable group by F_ID 

F_ID является внешним ключом. Я пытаюсь обновить другое поле, где максимальная дата. Проблема в том, что может быть много строк с одним и тем же внешним ключом и той же датой. В случае, если это максимальная дата, у меня есть несколько строк, я хочу обновить их все.

Ближайший я был в состоянии получить это:

update MyTable set 
Curr = 1 
where (select cast(Date as varchar(20))+cast(F_ID as varchar(10)) from MyTable) in 
(select cast(max(Date)as varchar(20))+cast(F_ID as varchar(10)) from MyTable group by A_PID) 

Я получаю эту ошибку:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 
The statement has been terminated. 

Спасибо за помощь!

Edit: Окончательный формат запроса для обновления заявление в случае, если кто-то ищет это:

update MyTable set 
    Curr = 1 
from MyTable t inner join 
    (select F_ID,max(Date) maxDate 
    from MyTable group by A_PID) t2 
on t.A_PID = t2.A_PID and t.Date = t2.maxDate 

Благодаря @Jim

ответ

2

группы строк по FK, выберите FK и Max(date) as MaxDate, затем присоедините результат к той же таблице по FK=FK и date=maxDate (надеюсь, у вас нет одинаковых дат на FK)
Если даты действительно равны на FK, то посмотрите на another my answer

SELECT t1.* FROM Table t1 
INNER JOIN 
    (SELECT F_ID, max(date) maxDate 
    FROM Table 
    GROUP BY F_ID) t2 
ON t1.F_ID=t2.F_ID AND t1.date=t2.maxDate 
+0

Спасибо, но у меня есть одинаковые даты на FK. Я хочу обновить все строки с равной датой, если это максимальная дата. – Pat

+0

@Pat Вы уверены, что ваши даты, в том числе время, areequeal? Btw, даст другое решение. – LINQ2Vodka

+0

Да. Я конвертирую для другой БД. Время всегда 00: 00: 00: 000 – Pat

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