I have a table where unique records can be identified using a concatenation of ORDER and ITEM, like so:
ORDER | ITEM |
---|---|
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
... | ... |
The table currently has duplicates of each unique combination, like so:
ORDER | ITEM |
---|---|
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
... | ... |
I'm using the following subquery to select all duplicate rows:
SELECT * FROM (
SELECT order + item AS ID,
Row_Number() OVER(PARTITION BY order, item ORDER BY order) as CN
FROM [schema].[table]
)
AS Q WHERE Q.CN > 1
With the result:
ID | CN |
---|---|
1234001 | 2 |
1234001 | 3 |
1234001 | 4 |
1234002 | 2 |
1234002 | 3 |
1234002 | 4 |
1235001 | 2 |
1235001 | 3 |
1235001 | 4 |
... | ... |
Forgive me if this is a very simple question, but is there a simple modification to turn the above subquery into a delete statement and remove every record it currentlyt selects (i.e. with CN > 1)?