/ / अधिकतम मूल्य को छोड़कर एक्सेस हटाएं - एसक्यूएल, एमएस-एक्सेस, एमएस-एक्सेस -2007

अधिकतम मूल्य - एसक्यूएल, एमएस-एक्सेस, एमएस-एक्सेस -2007 को छोड़कर सभी को हटाएं

मैं डुप्लीकेट और समेकित मूल्यों से भरे एक एक्सेस टेबल (contam) को छीनने की कोशिश कर रहा हूं।

तालिका इस तरह दिखती है

FederalSiteIdentifier Contam
001 1
001 1, 2
001 1, 2, 3
001 1, 2, 3, 4
002 1
003 1
003 1, 2
003 1, 2, 3

मैं केवल प्रत्येक आईडी के लिए अंतिम - सबसे लंबी प्रविष्टि रखना चाहता हूं, लेकिन एक्सेस एसक्यूएल में ऐसा करने का उचित तरीका नहीं समझ सकता।

कुछ पढ़ने के बाद मैंने इस सरल कोड को आजमाया:

SELECT FederalSiteIdentifier, Max(Contam) as MaxCont
FROM contam
ORDER BY FederalSiteIdentifier

जो एक त्रुटि उत्पन्न करता है।

क्या कोई मदद कर सकता है?

उत्तर:

जवाब के लिए 0 № 1

मुझे लगता है कि आप अधिकतम लंबाई चाहते हैं Contam प्रत्येक के लिए मूल्य FederalSiteIdentifier। आपको एक की आवश्यकता होगी GROUP BY खंड।

SELECT FederalSiteIdentifier, Max(Len(Contam)) as MaxCont
FROM contam
GROUP BY FederalSiteIdentifier

यदि वह क्वेरी उन पंक्तियों की पहचान करती है जिन्हें आप रखना चाहते हैं, तो इसे सेव करें qryRows2Keep, तो इसे आजमाएं DELETE क्वेरी:

DELECT FROM contam
WHERE
Len(Contam) < DLookup(
"MaxCont",
"qryRows2Keep",
"FederalSiteIdentifier = "" & FederalSiteIdentifier & """)

मेंने सोचा FederalSiteIdentifier पाठ डेटा प्रकार है। यदि यह संख्यात्मक है, तो एकल उद्धरण को छोड़ दें DLookup अभिव्यक्ति।

कृपया सुनिश्चित करें कि आपने इस अवांछित सुझाव का प्रयास करने से पहले अपना डेटा बैक अप लिया है। :-)


जवाब के लिए 0 № 2

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

एक नया कॉलम बनाएं ताकि हम रखने के लिए रिकॉर्ड चुन सकें।

ALTER TABLE contam ADD Keep BIT NOT NULL DEFAULT 0;

अब रिकॉर्ड्स की पहचान करें और तालिका अपडेट करें

UPDATE c
SET    keep = 1
FROM   contam AS c
INNER JOIN (
SELECT FederalSiteIdentifier, Max(Len(Contam)) as MaxCont
FROM contam
GROUP BY FederalSiteIdentifier
ORDER BY FederalSiteIdentifier
) AS maxc
ON c.FederalSiteIdentifier = maxc.FederalSiteIdentifier
AND Len(c.Contam) = maxc.MaxCont;

ग्रुप बाय लाइन पर ध्यान दें ... "जो आपको याद आया वह आपको एक त्रुटि दे रहा था ..

अंत में हटाएं प्रदर्शन करें

 DELETE FROM contam
WHERE keep = 0;

अब आप अतिरिक्त कॉलम हटा सकते हैं

ALTER TABLE contam DROP COLUMN Keep;

लंबे समय तक घुमाया लेकिन तुम वहाँ जाओ।