2011-09-19 56 views
0

,我有以下数据更新行仅在最大日期

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匹配的价值,但我只想更新每个星期的最大(日期)。原因是,包含数据源的表格每周都有日期,我将每天更新表格,并且使用我当前拥有的查询,例如,在id和周匹配的所有日期,它会更新例如26043,歪曲我的未来查询我将在哪里总结这些列的值。

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

回答

3

像这样的事情

派生表是用来获取每周/ 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 

第1行对于SQL Server 2000和更早的版本,你需要的总和。请参阅DBA.SE for more

+0

这给了我与我的查询相同的结果,即它正在更新所有日子,而不仅仅是最大值。 – Jessica

+2

@JP:分别运行派生表,你会看到每月最大日期/ ID的rn = 1。也就是说,它只会提取O_Second = 26043的行。现在,为了更新“OtherTable”中的所有行,意味着Week/ID *不足以识别行。这*确实*基于你给我们的工作。请添加更多数据和表格结构 – gbn