मुझे डुप्लीकेट पंक्तियों वाली तालिका को साफ़ करना है:
id: serial id
gid: group id
url: string <- this is the column that I have to cleanup
एक gid
कई हो सकते हैं url
मान:
id gid url
---- ---- ------------
1 12 www.gmail.com
2 12 www.some.com
3 12 www.some.com <-- duplicate
4 13 www.other.com
5 13 www.milfsome.com <-- not a duplicate
मैं पूरी तालिका के खिलाफ एक क्वेरी निष्पादित करना चाहता हूं और जहां सभी पंक्तियों को हटाना है gid
तथा url
डुप्लिकेट हैं उपरोक्त नमूने में, हटाने के बाद, मैं केवल 1, 2, 4 और 5 शेष रखना चाहता हूं।
उत्तर:
उत्तर № 1 के लिए 12;WITH x AS
(
SELECT id, gid, url, rn = ROW_NUMBER() OVER
(PARTITION BY gid, url ORDER BY id)
FROM dbo.table
)
SELECT id,gid,url FROM x WHERE rn = 1 -- the rows you"ll keep
-- SELECT id,gid,url FROM x WHERE rn > 1 -- the rows you"ll delete
-- DELETE x WHERE rn > 1; -- do the delete
एक बार जब आप पहले चयन से खुश हो जाते हैं, जोउन पंक्तियों को इंगित करता है जिन्हें आप "बनाए रखेंगे, इसे हटा दें और दूसरे चयन पर टिप्पणी न करें। एक बार जब आप" इससे खुश हो जाते हैं, जो पंक्तियों को इंगित करता है जिसे आप हटा देंगे, इसे हटा दें और हटाएं पर टिप्पणी न करें
और यदि आप डेटा हटाना नहीं चाहते हैं, तो नीचे दी गई टिप्पणी की गई लाइनों को अनदेखा करें SELECT
...
उत्तर № 2 के लिए 1
SELECT
MIN(id) AS id,
gid,
url
FROM yourTable
GROUP BY gid, url