2010-09-08 12 views
17

मेरे पास 1000 रिकॉर्ड वाले डेटाबेस हैं। मैं एक SQL कथन बनाने की कोशिश कर रहा हूं ताकि यदि रिकॉर्ड की संख्या 1000 से ऊपर बढ़ती है, तो सबसे पुराने रिकॉर्ड हटा दिए जाते हैं (यानी 1000 से ऊपर के नए रिकॉर्ड 'पुराने रिकॉर्ड को प्रतिस्थापित करें')। मैं SQLite का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि सामान्य SQL वाक्यविन्यास यहां फिट होगा।डेटाबेस से पुराने रिकॉर्ड हटाएं

+0

यदि आप कुछ तालिका स्कीमा विवरण शामिल करते हैं तो आपको अधिक उत्तर मिल सकते हैं। – serg10

+0

आप अधिक जानकारी प्रदान करना चाहते हैं। जैसा कि आपके पास कॉलम पर टाइमस्टैम्प है? क्या आईडी एक GUID या ऑटो वृद्धि है? सभी पुरानी एक्स तारीख को हटाने का आपका लक्ष्य क्या है या क्या 1000 रिकॉर्ड की सीमा है? या इन अभिलेखों को हटाने का कारण क्या है? हम तब आपके प्रश्न का बेहतर उत्तर दे सकते हैं। –

+0

ओह और आपका प्राथमिक कुंजी फ़ील्ड क्या है? या आप भी एक है? –

उत्तर

35

आप एक स्वत: वेतन वृद्धि क्षेत्र का उपयोग करते हैं, आप आसानी से सबसे पुराने 100 रिकॉर्ड हटाने के लिए इस लिख सकते हैं:

DELETE FROM mytable WHERE id IN (SELECT id FROM mytable ORDER BY id ASC LIMIT 100) 

या, अगर ऐसी कोई क्षेत्र मौजूद है, ROWID का उपयोग करें:

DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID ASC LIMIT 100) 

या, केवल नवीनतम 1000 के रिकॉर्ड को छोड़ने के लिए:

DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID DESC LIMIT -1 OFFSET 1000) 
+1

धन्यवाद, लेकिन मुझे एक की आवश्यकता है ... सीमा -1 ऑफ़सेट 1000 – Seven

+0

मैं इसका उपयोग करने के बारे में सोच रहा था, लेकिन क्या MySQL पहले हटाए गए आईडी का उपयोग नहीं करेगा, इसलिए यह अब और काम नहीं करेगा? चूंकि आईडी = 1 उपलब्ध हो जाएगा, आईडी = 1 के साथ एक नई पंक्ति बनाई जाएगी तो पहले हटा दिया जाएगा ..? – NaturalBornCamper

1

यह मानते हुए कि अपनी मेज एक प्राथमिक है कुंजी और यह दर्शाता है जब रिकॉर्ड डाला गया था) एक टाइमस्टैम्प के साथ एक स्तंभ है, तो आप एक प्रश्न

delete from tableToDeleteFrom 
where tablePK in 
(select tablePK 
from tableToDeleteFrom 
where someThresholdDate <= @someThresholdDate) 
-3

की तर्ज पर सभी रिकॉर्ड पहले रिकॉर्ड (न्यूनतम/अधिकतम आईडी) आप उपयोग कर सकते हैं, सिवाय इसके उपयोग को नष्ट कर सकते हैं:

SET @ls AS INT 

SELECT @ls = MIN(id) FROM DATA 

DELETE FROM DATA WHERE id <> @ls 
+0

क्या यह वास्तव में प्रश्न का उत्तर देता है? – voromax

संबंधित मुद्दे