2012-11-08 25 views
6

Tablonun altındaki/son satırını güncellemek istiyorum. Ben this çözümü uygulamaya çalışıyorum, ama hiçbir şey olarak doğru sözdizimini görünüyor:T-SQL Yalnızca alt/son satır nasıl güncellenir?

UPDATE TOP(1) @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
ORDER BY PeriodID DESC 

VEYA

UPDATE TOP(1) @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
FROM @ResultTable 
ORDER BY PeriodID DESC 

Şimdi ne çalışma dek sahip olduğu:

UPDATE @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
WHERE PeriodID=(SELECT COUNT(PeriodID) FROM @ResultTable)-1 

ancak bu her zaman olmaz işlerimdeki gibi, kayıtların bir kısmı silinir ve ben her zaman PeriodID'leri 1 ile arttırılmamış olurum.

cevap

15
;WITH CTE AS 
( 
SELECT TOP 1 * 
FROM @ResultTable 
ORDER BY PeriodID DESC 
) 
UPDATE CTE SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
5

Sorunuzda kurşun geçirmez bir yanıt vermek için yeterli içerik yok. Çalışma çözümünüze dayanarak, sayımı aramak yerine maksimum Periyodi aramaya ne dersiniz? Sonraki PeriodID'ler daha büyük bir değer olduğu sürece "son" kaydı almak için çalışmalıdır.

UPDATE @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
WHERE PeriodID=(SELECT MAX(PeriodID) FROM @ResultTable) 
1

her satırda benzersiz bir sütun (belki PeriodID?) Varsa böyle bir şey yapabilirsiniz:

UPDATE @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
where <unique column> = (select top 1 <unique column> 
    from @ResultTable 
    order by PeriodID desc 
)