2016-06-15 2 views
0

У меня есть таблицаA, в которой есть два поля Телефон, CallTime Существует еще один TableB, который имеет три поля Name, Telephone1 и LastCallTime Я хочу обновить поле TableB LastCallTime из поля TableA CallTime, когда Поле Telephone1 TableB соответствует полю телефона TableA. Но есть проблема. В таблице A есть несколько записей Calltime против того же телефона. i.eОбновить запрос Получить последнюю запись SQL

  • 123-456-7891 | 2016-01-01 00:02
  • 456-789-8651 | 2015-03-07 02:09
  • 123-456-7891 | 2016-06-10 12:02

вот так, Так что всякий раз, когда я запускаю запрос на обновление, он обновляет запись записью, которая не является последней. Есть ли в любом случае, я могу обновить таблицу с помощью последнего вызова. Например, последняя запись из предыдущего примера, которая является последней.

UPDATE TableA 
SET LastCallTime = TableB.CallTime 

FROM TableB 
WHERE 
    TableA.Telephone = TableB.Telephone1 
+0

Можете ли вы включить запрос на обновление в вопрос? – jwatts1980

ответ

1

Вы можете сделать это с помощью join и агрегации:

update b 
    set lastCallTime = a.callTime 
    from tableB b join 
      (select telephone, max(callTime) as callTime 
      from tablea a 
      group by telephone 
     ) a 
      on b.telephone = a.telephone; 
+0

Поблагодарите u sooo much @Gordon Linoff. Ваш запрос работает отлично. –

2

Вы можете использовать подзапрос в вашем UPDATE заявление и использовать TOP, чтобы получить последнюю CallTime:

UPDATE b 
    SET b.LastCallTime = (
     SELECT TOP 1 CallTime 
     FROM TableA a 
     WHERE a.Telephone = b.Telephone 
     ORDER BY a.CallTime DESC 
    ) 
FROM TableB b 
+1

Обратите внимание, что это установит непревзойденные записи в 'NULL'. , , которые могут быть хорошими или плохими, в зависимости. –

0

Ьгу это

Update TABLEB B 
set B.lastcalltime= A.calltime 
(
select 
    telephone, 
    calltime, 
    from (select 
       telephone, 
       calltime, 
       ROW_NUMBER() OVER(Order by calltime desc) rnum 
       from 
       TABLEA) 
       where rnum=1 
      ) A 
where B.telephone1=A.telephone 
Смежные вопросы