2012-11-08 13 views
6

मैं अपनी तालिका में नीचे/अंतिम पंक्ति को अपडेट करना चाहता हूं। मैं this समाधान को लागू करने की कोशिश की है, लेकिन कुछ भी नहीं के रूप में सही सिंटैक्स लगता है:टी-एसक्यूएल केवल नीचे/आखिरी पंक्ति को कैसे अपडेट करें?

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

या

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

क्या मैं अब काम कर रहा है जब तक है:

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

लेकिन यह हमेशा नहीं होगा काम करता है, जैसा कि मेरे फ़ंक्शन में कुछ रिकॉर्ड्स हटा दिए जाते हैं और मेरे पास हमेशा अवधि के साथ वृद्धि नहीं होती है।

उत्तर

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

बुलेटप्रूफ उत्तर देने के लिए आपके प्रश्न में पर्याप्त संदर्भ नहीं है। आपके कामकाजी समाधान के आधार पर, अधिकतम अवधि अवधि के लिए गिनती की तलाश करने के बजाय कैसे? जब तक कि PeriodID के बाद एक बड़ा मूल्य है, इसे "अंतिम" रिकॉर्ड प्राप्त करने के लिए काम करना चाहिए।

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

आप कुछ इस तरह कर सकता है आप प्रत्येक पंक्ति में एक अद्वितीय स्तंभ (शायद PeriodID?) है, तो:

UPDATE @ResultTable 
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate) 
where <unique column> = (select top 1 <unique column> 
    from @ResultTable 
    order by PeriodID desc 
) 
संबंधित मुद्दे