WITH cte AS (
SELECT
contact_id,
first_name,
last_name,
email,
ROW_NUMBER() OVER (
PARTITION BY
first_name,
last_name,
email
ORDER BY
first_name,
last_name,
email
) row_num
FROM
sales.contacts
)
DELETE FROM cte
WHERE row_num > 1;
/* This SQL Query will show each of those duplicate
rows individually instead of just grouping it */
SELECT username,email
FROM `users`
WHERE `username`
IN (SELECT username FROM `users` GROUP BY username HAVING COUNT(username) > 1)
# Step 1: Copy distinct values to temporary table
CREATE TEMPORARY TABLE tmp_user (
SELECT id, name
FROM user
GROUP BY name
);
# Step 2: Remove all rows from original table
DELETE FROM user;
# Step 3: Remove all rows from original table
INSERT INTO user (SELECT * FROM tmp_user);
# Step 4: Remove temporary table
DROP TABLE tmp_user;
/*SELECT hotel_id, reservation_id, COUNT(hotel_id)FROM staywhere reservation_id is not nullGROUP BY hotel_id, reservation_idHAVING COUNT(hotel_id) > 1*/select distinct s.hotel_id , t.* from stay sright join ( select hotel_id, reservation_id, count(*) as qty from staywhere reservation_id !=1 group by hotel_id, reservation_id having count(*) > 1) t on s.hotel_id = t.hotel_id and s.reservation_id = t.reservation_id
--ID should be primary key
--get duplicate records using RANK
SELECT E.ID,
E.firstname,
E.lastname,
E.country,
T.rank
FROM [SampleDB].[dbo].[Employee] E
INNER JOIN
(
SELECT *,
RANK() OVER(PARTITION BY firstname,
lastname,
country
ORDER BY id) rank
FROM [SampleDB].[dbo].[Employee]
) T ON E.ID = t.ID;
--delete duplications
DELETE E
FROM [SampleDB].[dbo].[Employee] E
INNER JOIN
(
SELECT *,
RANK() OVER(PARTITION BY firstname,
lastname,
country
ORDER BY id) rank
FROM [SampleDB].[dbo].[Employee]
) T ON E.ID = t.ID
WHERE rank > 1;