我有一张如下表所示的表格:
我需要将它们更新为最新的last_order_date,表格如下所示:
我有20000多条记录,我需要一个查询来立即更新它们。
感谢您花时间去看它。
答案 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行并不是那么多。 (除非你非常期望这个数字能够迅速迅速增长。)