so you want to delete all the duplicates except the "youngest" one?
I would try it this way:
CREATE TABLE U_TABLE (OBJ_ID INT IDENTITY(1,1), S_FIELD INT, P_FIELD INT )
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 1)
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 1)
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 1)
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 2)
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 2)
INSERT INTO U_TABLE (S_FIELD, P_FIELD) VALUES (1, 2)
SELECT * FROM U_TABLE
WITH cte AS (
SELECT ROW_NUMBER() OVER (PARTITION BY S_FIELD, P_FIELD
ORDER BY OBJ_ID DESC ) RN
FROM U_TABLE)
DELETE FROM cte WHERE RN>1
this works with SQL-Server 2008 (you didn't mention your version) so if you like it, you need to check whether common table expressions will work for you