|  | Posted by Erland Sommarskog on 07/19/07 20:53 
Radu (cuca_macaii2000@yahoo.com) writes:> I have a "union" table which results of a union of two tables.
 > Occasionally I could have duplicates, when the same PIN has been added
 > to both tables, albeit at different Datees/Times, such as:
 >
 > PIN     Name     Added Date
 > 100411     A     7/11/2007 10:12:58 AM
 > 100411     A     7/17/2007 10:54:23 AM
 > 100413     B     7/11/2007 10:13:28 AM
 > 100413     B     7/17/2007 10:54:39 AM
 > 104229     C     7/6/2007 2:34:13 PM
 > 104231     D     7/6/2007 2:34:25 PM
 > 104869     E     6/10/2007 11:59:12 AM
 > 104869     E     6/22/2007 2:40:18 PM
 >
 > The question is - how can I delete by queries the first occurence
 > (time-wise) of these duplicates - i.e. I would want to delete the
 > first occurence of 100411 (A), the first occurence of 100413 (B), and
 > the first occurence of 104869 (E) in the example above - records C and
 > D show only once, so they are fine.
 >
 > Is there a MsAccess solution ? Is there a SQL-server solution ?
 
 What about a primary key on (PIN, Name) to prevent this from happening
 in the first place?
 
 It's unclear what you with first occurrance, but I take to mean that
 you mean the one with the earliest value of Added Date:
 
 DELETE tbl
 FROM   tbl a
 JOIN   (SELECT PIN, Name, AddedDate = MIN(AddedDate)
 FROM   tbl
 GROUP  BY PIN, Name) AS b ON a.PIN = b.PIN
 AND a.Name = b.Name
 AND a.AddedDate > b.AddedDate
 
 This solution is for SQL Server. For Access solutions, try another
 newsgroup.
 
 --
 Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
 
 Books Online for SQL Server 2005 at
 http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
 Books Online for SQL Server 2000 at
 http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
  Navigation: [Reply to this message] |