【问题标题】:Updating Table From Another Table, Selecting the Most Recent 'Date' For each Supplier从另一个表更新表,为每个供应商选择最近的“日期”
【发布时间】:2012-09-03 17:16:12
【问题描述】:

我正在使用来自SupplierB 的详细信息更新SupplierA

SupplierB 包含供应商提供的每个订单,但是,当我插入 SupplierA 时,我只希望每个供应商有一个实例,因此 most recent 日期与顺序。

目前我正在做这样的事情;

UPDATE SupplierA
SET LastSupplyDate = (SELECT [DATE] FROM SupplierB AS SB WHERE SB.Supplier COLLATE DATABASE_DEFAULT = SupplierA.SupNumber COLLATE DATABASE_DEFAULT)
WHERE [Site] = 2

显然这会返回多个值,我如何获得最新的值,MAX() 是一个选项吗?如果有任何想法/想法,我将不胜感激?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SET LastSupplyDate = (SELECT MAX([DATE])...
    

    【讨论】:

      【解决方案2】:
      UPDATE SupplierA
      SET LastSupplyDate = (SELECT MAX([DATE]) FROM SupplierB AS SB WHERE SB.Supplier COLLATE DATABASE_DEFAULT = SupplierA.SupNumber COLLATE DATABASE_DEFAULT)
      WHERE [Site] = 2
      

      【讨论】:

        【解决方案3】:
        UPDATE SupplierA SET LastSupplyDate =   
        (  
          SELECT TOP 1 [DATE] FROM SupplierB AS SB  
          WHERE SB.Supplier
          COLLATE DATABASE_DEFAULT = SupplierA.SupNumber COLLATE DATABASE_DEFAULT 
          ORDER BY [DATE] DESC
        
        
        ) 
        WHERE [Site] = 2
        

        【讨论】:

        • 如果查询的列有索引(我猜他的查询就是这样)TOP 1 和MAX 性能一样
        • 我对使用 TOP 没有特别的反对意见(尽管它的可移植性较差)并且认为它不值得 3 次投票,但语法无效 WHERE SB.Supplier ORDER BY
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多