आपने यह नहीं बताया कि आप किस संस्करण का उपयोग कर रहे थे, लेकिन SQL 2005 और इसके बाद के संस्करण में, आप ओवर क्लॉज के साथ एक सामान्य तालिका अभिव्यक्ति का उपयोग कर सकते हैं। यह कुछ इस तरह है:
WITH cte AS (
SELECT[foo], [bar],
row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
FROM TABLE
)
DELETE cte WHERE [rn] > 1
इसके साथ खेलें और देखें कि आपको क्या मिलता है।
(संपादित करें:सहायक होने के प्रयास में, किसी ने ORDER BY
संपादित किया सीटीई के भीतर खंड। स्पष्ट होने के लिए, आप यहां अपनी इच्छानुसार कुछ भी ऑर्डर कर सकते हैं, यह सीटीई द्वारा लौटाए गए कॉलम में से एक नहीं होना चाहिए। वास्तव में, यहां एक सामान्य उपयोग-मामला यह है कि "फू, बार" समूह पहचानकर्ता हैं और "बाज" किसी प्रकार का समय टिकट है। नवीनतम रखने के लिए, आपको ORDER BY baz desc
)