更新最新日期

时间:2014-01-06 02:35:59

标签: sql sql-server sql-server-2008 sql-update

我有一张如下表所示的表格:

enter image description here

我需要将它们更新为最新的last_order_date,表格如下所示:

enter image description here

我有20000多条记录,我需要一个查询来立即更新它们。

感谢您花时间去看它。

3 个答案:

答案 0 :(得分:2)

在最大计算子查询上使用连接

UPDATE t
SET t.last_order_date =a.maxDate
FROM tableName t
INNER JOIN
 ( SELECT cust_id ,MAX(last_order_date) As maxDate
   FROM tableName GROUP BY cust_id ) a
ON a.cust_id =t.cust_id 

答案 1 :(得分:0)

这应该适合你:

UPDATE [table_name] 
SET    last_order_date = (SELECT Max([b].last_order_date) 
                          FROM   [table_name] [b] 
                          WHERE  [b].cust_id = [table_name].cust_id); 

答案 2 :(得分:0)

您可以使用CTE MAX()计算window中的最长日期,然后在主(UPDATE)语句中引用CTE:

WITH maxdates AS (
  SELECT
    last_order_date,
    actual_last_order_date = MAX(last_order_date) OVER (PARTITION BY cust_id)
  FROM atable
)
UPDATE maxdates
SET last_order_date = actual_last_order_date
;

然而,复制这样的信息似乎没有多大意义。您应该考虑将last_order_date存储在cust_id是主键(可能是某些customers表)的表中。或者甚至放弃将它存储在一个表中并每次动态计算它:20,000行并不是那么多。 (除非你非常期望这个数字能够迅速迅速增长。)