更新查询获取最新记录SQL

时间:2016-06-15 02:26:31

标签: sql sql-server tsql ssms

我有一个tableA,其中有两个字段Telephone,CallTime 另一个TableB有三个字段Name,Telephone1和LastCallTime 每当TableB的Telephone1字段与TableA的Telephone字段匹配时,我想从TableA CallTime字段更新TableB LastCallTime字段。 但是有一个问题。 在TableA中,针对同一电话有多个Calltime记录。 即

  • 123-456-7891 | 2016-01-01 00:02
  • 456-789-8651 | 2015-03-07 02:09
  • 123-456-7891 | 2016-06-10 12:02
像这样, 因此,每当我运行更新查询时,它都会使用不是最新的记录更新记录。无论如何我可以使用最新的calltime更新表。例如,上面示例中的最后一条记录是最新的记录。

UPDATE TableA 
SET LastCallTime = TableB.CallTime 

FROM TableB 
WHERE 
    TableA.Telephone = TableB.Telephone1

3 个答案:

答案 0 :(得分: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 :(得分: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;

答案 2 :(得分: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