2012-11-08 5 views
6

Voglio aggiornare l'ultima riga/l'ultima nella mia tabella. Ho provare a implementare this soluzione, ma nulla sembra come sintassi corretta:T-SQL Come aggiornare solo l'ultimo/ultimo riga?

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

O

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

Quello che ho fino ad ora di lavoro è:

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

ma questo sempre non lo farò funziona, come nella mia funzione alcuni dei record sono stati cancellati e non ho sempre periodici incrementati con 1.

risposta

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

Non c'è abbastanza contesto nella tua domanda per dare una risposta a prova di proiettile. In base alla tua soluzione di lavoro, che ne dici invece di cercare il conteggio del numero massimo di PeriodID? Finché i PeriodID successivi hanno un valore maggiore, dovrebbe funzionare per ottenere il record "last".

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

Se si dispone di una colonna unica (forse PeriodID?) In ogni riga si potrebbe fare qualcosa di simile:

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