【问题标题】:Update query Get Latest record SQL更新查询 获取最新记录 SQL
【发布时间】:2016-10-15 23:00:38
【问题描述】:

我有一个表 A,其中有两个字段 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

像这样, 因此,每当我运行更新查询时,它都会使用不是最新的记录来更新记录。无论如何我可以用最新的通话时间更新表格。例如上面示例中的最后一条记录是最新的。

UPDATE TableA 
SET LastCallTime = TableB.CallTime 

FROM TableB 
WHERE 
    TableA.Telephone = TableB.Telephone1

【问题讨论】:

  • 您能否在问题中包含您的更新查询?

标签: sql sql-server tsql ssms


【解决方案1】:

您可以在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

【讨论】:

  • 请注意,这会将不匹配的记录设置为 NULL 。 . .这可能是好是坏,取决于。
【解决方案2】:

您可以使用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;

【讨论】:

  • 非常感谢@Gordon Linoff。您的查询完美运行。
【解决方案3】:

试试这个

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

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2021-01-10
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多