Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove duplicate rows using CTE?

I would like to remove duplicate rows from my table. So that I have used ROW_NUMBER() function in order to find the duplicate values. After that I wanted to add WHERE claues to my query and so that I modify my query and used "CTE" but it gives me an error

ORA-00928: missing SELECT keyword

This is the query which runs successfully for my use case :

WITH RowNumCTE as
(
 SELECT ID,parcelid,propertyaddress,saledate,saleprice,legalreference,
         ROW_NUMBER() OVER
         ( PARTITION BY parcelid,propertyaddress,saledate,saleprice,legalreference 
               ORDER BY id ) AS rn
    FROM housedata
)
SELECT *
  FROM RowNumCTE
like image 783
Mohammad Liton Hossain Avatar asked Sep 14 '26 10:09

Mohammad Liton Hossain


2 Answers

To delete duplicates:

delete housedata where rowid in
       ( select lead(rowid) over (partition by parcelid, propertyaddress, saledate, saleprice, legalreference order by id)
         from   housedata );

To delete duplicates using a CTE:

delete housedata where id in
       ( with cte as
              ( select id
                     , row_number() over(partition by parcelid, propertyaddress, saledate, saleprice, legalreference order by id) as rn
                from   housedata )
         select id from cte
         where  rn > 1 );
like image 110
William Robertson Avatar answered Sep 16 '26 23:09

William Robertson


--Remove Duplciates[SKR]

--Option A:

select * 
--delete t
from(
    select rowNumber=row_number() over (partition by SomeKey order by SomeKey), SomeKey from YourTable m 
)t where rowNumber > 1;

--Option B:

with cte as (
    select rowNumber=row_number() over (partition by SomeKey order by SomeKey), SomeKey from YourTable m 
) 
--delete from cte where rowNumber > 1
select * from cte where rowNumber > 1
like image 39
Siva Avatar answered Sep 16 '26 23:09

Siva



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!