 <p>Yes - you or have to introduce date_of_entry field or some other vector field like <code>IDENTITY</code>. For example if column <code>Id</code> is your <code>INT IDENTITY</code>, then your query will look like this:</p> <pre><code> ;WITH cte AS (SELECT ROW_NUMBER() OVER (PARTITION BY person_id, date_work, hours ORDER BY ( SELECT Id DESC)) RN FROM work_hours) DELETE FROM cte WHERE RN &gt; 1 </code></pre> <p><strong>Of course</strong> it is valid if nobody changes the values in <code>IDENTITY</code> column</p> <p>And if your conditions suits - then you may want to use column <code>Hours</code> as your vector field within grouping range of <code>person_id, date_work</code></p> <p><strong>And even better way</strong> is to have an <code>UNIQUE INDEX</code> over columns <code>person_id, date_work, hours</code>, then there will no any ability to add duplicates.</p>