仅在最大日期的位置更新行

时间:2011-09-19 18:32:07

标签: sql sql-server-2005

我有以下数据

Date                    Week    ID      Tot_Seconds   O_Seconds   Week_ID
8/14/2011 12:00:00 AM   5823    22180   170043        26043         18
8/21/2011 12:00:00 AM   5824    22180   126471           0          18

我正在尝试更新另一个表中的列O_Seconds的值,其中周和ID匹配,但我只想更新每周的max(日期)。原因是,带有数据源的表具有按周的日期,我将每天更新的表是每天,并且使用我当前拥有的查询,它更新例如26043,用于id和周匹配的所有日子,扭曲我的未来查询我将对这些列的值求和。

有没有办法只更新最大日期?

1 个答案:

答案 0 :(得分:4)

像这样的东西

派生表用于获取每周第1行/ ID

UPDATE
   O
SET
   SomeCol = S.O_Second
FROM
   OtherTable O
   JOIN
   (
   SELECT
      Week, ID, O_Second, 
      ROW_NUMBER() OVER (PARTITION BY Week, ID ORDER BY Date DESC) AS rn
   FROM
      ThisTable
   ) S ON O.Week = S.Week AND O.ID = S.ID
WHERE
   S.rn = 1

对于SQL Server 2000及更早版本,您需要一个聚合。见DBA.SE for more