Solved

Remove Duplicates based on Date Added

Posted on 2011-09-14
2
401 Views
Last Modified: 2012-08-14
I have an Access Table named tbl_TestAll  that I need to delete duplicates based on the Date Added date.

DtA is the Date Added field

The column names are liks such.
Cha, Allo, Tar, Cons, Opt, Des, Pct, Len, Cur, Com, DtA, For, Mar.

The rows are as such:

Row 1 Ca1, Allo1, Tar2, Cons1, Opt 1, Des1, Pct 3, Len1, Cur2, Com 2,  7/14//2001, For1, Mar1
Rpw 2 Ca1, Allo1, Tar3, Cons1, Opt 1, Des2, Pct 4, Len2, Cur3, Com 2,  9/14/2001,  For1, Mar1

So basically, Cha, Allo, Cons, Opt, For, MarI are duplicated in both rows.

I need a query that will delete Row 1, and keep Row 2 based on the latest date.
0
Comment
Question by:mato01
2 Comments
 
LVL 59

Expert Comment

by:Kevin Cross
ID: 36539430
mato01,

In MS Access, it may be easiest to INSERT the rows you want into a new table, DELETE all rows, then put back the rows you want. You can try once you have done the insert into new table to DELETE where there is no match, so guess that is the key...

So, what I would try is to build a query that gets you the MAX DtA column that corresponds to Cha, Allo, Cons, Opt, For, MarI combinations.
SELECT Cha, Allo, Cons, Opt, For, MarI, MAX(DtA) MAX_DtA
FROM tbl_TestAll
GROUP BY Cha, Allo, Cons, Opt, For, MarI

Open in new window


If that looks like what you want, you can then JOIN that back to your original data, you may have to put it in an intermediate query first, but try:
SELECT t1.*
FROM tbl_TestAll AS t1
JOIN (
   SELECT Cha, Allo, Cons, Opt, For, MarI, MAX(DtA) MAX_DtA
   FROM tbl_TestAll
   GROUP BY Cha, Allo, Cons, Opt, For, MarI
) AS tm
   ON tm.Cha = t1.Cha
   AND tm.Allo = t1.Allo
   AND tm.Cons = t1.Cons
   AND tm.Opt = t1.Opt
   AND tm.For = t1.For
   AND tm.MarI = t1.MarI
   AND tm.MAX_Dta = t1.Dta
;

Open in new window


That should get you the records you want. Let me know if you have any questions from there as it is just a straight-forward, INSERT and DELETE operation.

And I can't remember if this works in MS Access, but you can try:
DELETE t1.*
FROM tbl_TestAll AS t1
JOIN (
   SELECT Cha, Allo, Cons, Opt, For, MarI, MAX(DtA) MAX_DtA
   FROM tbl_TestAll
   GROUP BY Cha, Allo, Cons, Opt, For, MarI
) AS tm
   ON tm.Cha = t1.Cha
   AND tm.Allo = t1.Allo
   AND tm.Cons = t1.Cons
   AND tm.Opt = t1.Opt
   AND tm.For = t1.For
   AND tm.MarI = t1.MarI
   AND tm.MAX_Dta <> t1.Dta
;

Open in new window


The change is not equal Dta.
0
 
LVL 1

Accepted Solution

by:
Milewskp earned 250 total points
ID: 36555312
Hi mato,
An aggregate query (call it Qry1) with MaxOfDtA will give you the rows with the latest dates. You could then base a delete qry on tbl_TestAll  and Qry1.
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …
With Microsoft Access, learn how to start a database in different ways and produce different start-up actions allowing you to use a single database to perform multiple tasks. Specify a start-up form through options: Specify an Autoexec macro: Us…

778 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question