Remove Duplicate values with a condition
Paul Mulroney
pmulroney at logicaldevelopments.com.au
Tue Sep 13 07:38:10 UTC 2022
Hi Martin,
Glad it's what you're looking for! Just to be clear, $ListIntersect() isn't a built-in function of Omnis, we had to write it!
Hopefully the github project will make sense of what I'm trying to say.
Regards,
Paul.
> On 13 Sep 2022, at 3:32 pm, Martin Obongita <martin.obongita at yahoo.com> wrote:
>
> Hi Paul
>
> Without a doubt, this is exactly what I was looking for.
>
> I didn't know it is called list intersect different from list merge.
>
> Thank you so much.
> I feel like a HUGE load has been lifted from my shoulder.
>
> Kind regards,
> Martin O.
>
> On Tuesday, September 13, 2022 at 05:48:23 AM GMT+3, Paul Mulroney <pmulroney at logicaldevelopments.com.au> wrote:
>
>
> Hi Martin,
>
> Sounds like you need to do a list intersection. We developed a method of optimised selecting matches in one list for values that appear in another list. We put the Studio 5 version up on Github:
>
> https://github.com/pmulroney/ListIntersect_for_Studio5 <https://github.com/pmulroney/ListIntersect_for_Studio5>
>
> That might achieve what you want - select the matches in one list, invert the selection and then merge into your final list.
>
> Regards,
> Paul.
>
>
>> On 13 Sep 2022, at 2:43 am, Martin Obongita via omnisdev-en <omnisdev-en at lists.omnis-dev.com <mailto:omnisdev-en at lists.omnis-dev.com>> wrote:
>>
>> Hi Dan Ridinger,
>> I appreciate your help.
>> I have done the following:
>> Do iSQLTableColNameRowList.$merge(lSQLTableColNameRowPrepareList,kTrue,kTrue,kFalse)
>> Do iSQLTableColNameRowList.$sort($ref.lOriginalColName)
>>
>> Do iSQLTableColNameRowList.$cols.lOriginalColName.$selectduplicates(kTrue)
>>
>> Do lSQLTableColNameRowSelectList.$copydefinition(iSQLTableColNameRowList)
>>
>> Do lSQLTableColNameRowUnselectList.$copydefinition(iSQLTableColNameRowList)
>>
>> Calculate lLineCount as iSQLTableColNameRowList.$linecount
>> For lLineNum from 1 to lLineCount step 1
>> If iSQLTableColNameRowList.[lLineNum].$selected
>> If iSQLTableColNameRowList.lIsSelect=kTrue
>> Do lSQLTableColNameRowSelectList.$add(,iSQLTableColNameRowList.lColName)
>> End If
>> Else
>> #not a duplicate
>> Do lSQLTableColNameRowUnselectList.$add(iSQLTableColNameRowList.lColName)
>> End If
>>
>> End For
>>
>> The list iSQLTableColNameRowList has rows with the column "lIsSelect" boolean status both true and false.
>> But after running the method, lSQLTableColNameRowSelectList does not contain any data.
>> All the data is added to lSQLTableColNameRowUnselectList both true and false "lIsSelect"
>> I tried using $filter but I got no better result either.
>> WHAT I AM DOING: I am merging two lists. List2 contains some data from List1.
>> List1 has "lIsSelect" column set to false for ALL data. List2 has "lIsSelect" set to true for some data.
>> I need to merge List1 with the boolean flag status from List2.
>>
>> CONCLUSION: I just need to know how to select the FIRST duplicate record in a list.
>> Then I can remove that first row.
>> Because by default, the $selectduplicates function will select the SECOND duplicate record.
>> Kind regards,
>> Martin O. On Monday, September 12, 2022 at 08:19:43 PM GMT+3, <dlr at futurechalk.com <mailto:dlr at futurechalk.com>> wrote:
>>
>> Hello,
>>
>> If you have some way to determine in the selected list the duplicates you wanted you could use $filter to get the rows. Otherwise you would have write a loop to get the first row at the control break of the sorted column.
>>
>> Dan Ridinger
>>
>>> On Sep 12, 2022, at 10:00 AM, Martin Obongita via omnisdev-en <omnisdev-en at lists.omnis-dev.com <mailto:omnisdev-en at lists.omnis-dev.com>> wrote:
>>>
>>> Hi Paul,
>>> I have played around with this duplicate.
>>> There is this command: $selectduplicates.
>>> Using this command will select the second duplicate row.
>>> Is there a way to set the command to select the first duplicate row?
>>> Kind regards,Martin O.
>>>
>>> On Monday, September 12, 2022 at 03:24:37 AM GMT+3, Paul Mulroney <pmulroney at logicaldevelopments.com.au <mailto:pmulroney at logicaldevelopments.com.au>> wrote:
>>>
>>> Hi Martin,
>>>
>>> I had to do this recently where I wanted to remove any duplicates the combination of two fields - first name and last name.
>>>
>>> This is how I did it (Studio 10.0, but should work anywhere). Note I had to create a local var vsFullName
>>>
>>> # Remove duplicates - same first name and surname
>>> Do vlOutput.$sort($ref.LastName,kFalse,$ref.FirstName,kFalse)
>>> Do vlOutput.$cols.$add(vsFullName)
>>> Do vlOutput.$sendall($ref.vsFullName.$assign(con($sendallref.FirstName,' ',$sendallref.LastName))) ## Create special column to remove dups
>>> Do vlOutput.$cols.vsFullName.$removeduplicates(kTrue,kTrue)
>>>
>>> You might need to do something similar.
>>>
>>> Regards,
>>> Paul.
>>>
>>>
>>>> On 12 Sep 2022, at 4:52 am, Martin Obongita via omnisdev-en <omnisdev-en at lists.omnis-dev.com <mailto:omnisdev-en at lists.omnis-dev.com>> wrote:
>>>>
>>>> Hi ALL,
>>>> I have the method below to remove duplicate rows in a listDo iSQLTableColNameRowList.$sort($ref.lOriginalColName,kFalse)
>>>> Do iSQLTableColNameRowList.$cols.lOriginalColName.$removeduplicates()
>>>> The problem is it deletes all duplicate rows.
>>>> How do I remove duplicate rows in a list with a condition, say, remove all duplicates but check that C7(the column flag in the list) is true?
>>>> Kind regards
>>>> _____________________________________________________________
>>>> Manage your list subscriptions at https://lists.omnis-dev.com <https://lists.omnis-dev.com/>
>>>> Start a new message -> mailto:omnisdev-en at lists.omnis-dev.com <mailto:omnisdev-en at lists.omnis-dev.com>
>>>
>
People used to laugh at me when I would say "I want to be a comedian", well nobody's laughing now.
--
Paul W. Mulroney We Don't Do Simple Pty Ltd
pmulroney at logicaldevelopments.com.au Trading as Logical Developments
www.logicaldevelopments.com.au ACN 161 009 374
Ph: +61 8 9458 3889 86 Coolgardie Street
BENTLEY WA 6102
More information about the omnisdev-en
mailing list