2012-11-27 52 views
1

我有一张表SUBSCRIBERS,其中每个订户可以有多个条目。如何在SQL Server 2008 R2中更新记录的最新条目

(比方说,因为它不再是一个用户,现在再次成为一个客户,所以它有一个不同的“身份”,但相同的“subno”)

我需要一个UPDATE声明,在更新列一行(假设他们的地址),但仅限于该订户的最新记录(最新的EffectiveDate)。

所以我想通了,如何选择这样的行:

SELECT 
    t1.identity, t1.Subno, t1.EffectiveDate 
FROM 
    SUBSCRIBERS t1 
INNER JOIN 
    (SELECT subno,max(EffectiveDate) as LatestDate 
    FROM SUBSCRIBERS 
    GROUP BY Subno) t2 ON t1.Subno = t2.Subno AND t1.EffectiveDate = t2.LatestDate 

但我不知道如何更新该行对于给定subno值。嗯,我这样做,但我不想用17个嵌套select语句来完成。

谢谢!

+0

你能后的表结构,数据的例子,结果,你期待什么呢?一个带有CREATE TABLE的独立脚本(仅限于基本列)和一些其他人可以复制,粘贴和运行的INSERT是理想的。 – Pondlife

回答

2

您可以使用“自更新”:

UPDATE SUBSCRIBERS 
SET Address = 'the address' 
FROM SUBSCRIBERS t1 
INNER JOIN 
    (SELECT subno,max(EffectiveDate) as LatestDate FROM SUBSCRIBERS 
    GROUP BY Subno) t2 
ON t1.Subno = t2.Subno and t1.EffectiveDate = t2.LatestDate 
+0

我从来没有种过UPDATE ... FROM之前。我想这就是为什么我要问这里的东西;-)我会试一试,并会让你知道。谢谢。 – Amarundo

+0

美丽!我只需要添加一个WHERE子句来更新正确的'Subno' – Amarundo

+0

不用客气:) – jazzytomato

相关问题