Rocky Smolin
rockysmolin at bchacc.com
Wed Sep 1 19:59:19 CDT 2010
A.D. (et al): Thank you. Worked perfectly. Efficiency was not too important as it was a one time run from converting some data imported from another system and the amount of data was small - 4 fields, <1000 records. Best, Rocky Smolin Beach Access Software 858-259-4334 www.e-z-mrp.com www.bchacc.com -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of A.D. Tejpal Sent: Wednesday, September 01, 2010 10:32 AM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Duplicates Query Rocky, You could also try two other alternatives as per sample queries given below, for removing all duplicates beyond the first occurrence. F1 to F4 are the names of four fields, combined contents of which, determine the duplicate status. ID is the name of PK field. Query Q_DEL_DupsBeyondFirst_ByNotInTop1 is expected to be more efficient as compared to Q_DEL_DupsBeyondFirst_ByCount. (There would be only one record featuring in the Not In clause). Note: (a) Individual comparison of fields, one at a time, has been preferred over using their concatenated contents, so as to eliminate the risk of inconsistent results arising out of potential sliding match. Moreover, contrived concatenation can detract from optimum performance. (b) Use of Nz() function while comparing the field values, eliminating the potential for erratic results arising out of Null values getting compared via = operator. Best wishes, A.D. Tejpal ------------ Q_DEL_DupsBeyondFirst_ByNotInTop1 ========================================== DELETE * FROM T_Data WHERE T_Data.ID Not In (SELECT TOP 1 ID FROM T_Data AS T WHERE Nz(T.F1, "") = Nz(T_Data.F1, "") AND Nz(T.F2, "") = Nz(T_Data.F2, "") AND Nz(T.F3, "") = Nz(T_Data.F3, "") AND Nz(T.F4, "") = Nz(T_Data.F4, "") ORDER BY ID); ========================================== Q_DEL_DupsBeyondFirst_ByCount ========================================== DELETE * FROM T_Data WHERE (SELECT Count(*) FROM T_Data AS T WHERE Nz(T.F1, "") = Nz(T_Data.F1, "") AND Nz(T.F2, "") = Nz(T_Data.F2, "") AND Nz(T.F3, "") = Nz(T_Data.F3, "") AND Nz(T.F4, "") = Nz(T_Data.F4, "") AND T.ID <= T_Data.ID) > 1; ========================================== ----- Original Message ----- From: Gustav Brock To: accessd at databaseadvisors.com Sent: Wednesday, September 01, 2010 22:39 Subject: Re: [AccessD] Duplicates Query Hi Rocky I believe you will have to group by these fields in a way to build a unique string, say: Group By [Field1] & "-" & [Field2] & "-" & [Field3] /gustav >>> rockysmolin at bchacc.com 01-09-2010 18:56 >>> Gustav: There are actually three fields that have to match up to make a duplicate. I suppose I could add another field which is the concatenation of those three but that seems kludgey. Any other more elegant solution? TIA Rocky -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock Sent: Wednesday, September 01, 2010 8:49 AM To: accessd at databaseadvisors.com Subject: Re: [AccessD] Duplicates Query Hi Rocky Use First or Last or Max or Min - just one that will return only one PK of the records where the field named "name" holds identical values. /gustav >>> rockysmolin at bchacc.com 01-09-2010 17:38 >>> Gustav: Looks right but it has step 2 as: 2. Create a totals Query1 which shows GroupBy the name, and First of the PK. I assume totals query = summation query. But "GroupBy the name" - what does 'name' refer to? And how to do First of the PK? TIA Rocky -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock Sent: Wednesday, September 01, 2010 12:16 AM To: accessd at databaseadvisors.com Subject: Re: [AccessD] Duplicates Query Hi Rocky Yes. Look up a not so old thread: http://databaseadvisors.com/pipermail/accessd/2009-May/068576.html /gustav >>> rockysmolin at bchacc.com 31-08-2010 18:42 >>> Dear List: I used the find duplicates query wizard to make a query to find duplicate records in a table. Is there a quick way to then delete all but one occurrence of the duplicated records? MTIA Rocky Smolin Beach Access Software 858-259-4334 -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com