[SQL Server] — วิธีลบข้อมูลที่ซ้ำกันในตาราง (Delete duplicate records)

สวัสดีครับ ห่างหายไปนานเลยครับ วันนี้พอดีผมมีโจทย์ว่าถ้าต้องการลบข้อมูลที่เกิดซ้ำขึ้นในฐานข้อมูลนั้น จะลบยังไงโดยไม่ต้องเขียนโปรแกรม (ขี้เกียจนะครับ 5555) ก็เลยไปขึ้นเจอมาแชร์กันนะครับ เราลองมาดูตัวอย่างกันนะครับ

ข้อมูลตัวอย่าง
ID,Data,Date
01, Coke, 01jun2017
02, Coke, 02jun2017
03, Coke, 29may2017
04, Pepsi, 01jun2017
05, Sprite, 31may2017
06, Sprite, 01jun2017

อยากได้ผลลัพธ์แบบนี้
ID,Data,Date
02, Coke, 02jun2017
04, Pepsi, 01jun2017
06, Sprite, 01jun2017

วิธีแก้ในครั้งนี้ของผมคือใช้ CTE (ผมใช้ SQL Server ครับ)

WITH cte AS (
SELECT ID
 , Data
, Date
, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC) AS RowNo
FROM TABLE
WHERE ID IN(SELECT ID FROM TABLE GROUP BY ID HAVING COUNT(*)> 1)
)
DELETE FROM cte WHERE RowNo > 1

เพียงแค่นี้เราก็สามารถลบข้อมูลที่ซ้ำๆตามที่เราต้องการได้เหลืออันที่ใช้จริงเท่านั้นนะครับ ถ้าใครมีโจทย์แบบนี้ก็ลองไปทำดูนะครับ หรือว่าจะมีวิธีอื่นๆก็มาแลกเปลี่ยนกันนะครับ ขอบคุณครับ ^^

Like what you read? Give Piti.C a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.