Thanks for the detailed instructions. I had actually got something working that is different from this and the other suggestions on this thread.
I started with a R.G. whose data source was to search for a thing.
Then I did :group by to create groupings by name of the thing
Then I did :filtered by to get all those whose count was greater than 1
After that I did :sorted by name which was more or less just for my visualization to see an ordered list
So what I have in that R.G. is a list of groups of things. Each group is created only when there is more than 1 of the thing by that groups name.

Then I created another RG to get the individual things as a list by group. What this basically did was say I had 50 groups of things, representing the fact that I had a minimum of 50 things with duplicates, which could be 2 or more duplicate entries (some of my things had 4 of the same in the DB, some only had 2).
I created a custom state to track the index number of the “group” RG (in my screenshot RG2) and it would display in my new RG all the items in the DB by that name…so if I had 4 things in DB with the same name, this new RG would show only those four items.
The item number is the custom state that tracks the index of the first RG that I have annotated in Red outline box. The black boxes are simply covering my datatype that I am searching for so as not to confuse others and they can focus on the general setup instead of the “thing” (datatype) being searched.
After that I have my workflow set up as so
This is incrementally increasing the custom state number to track the index number…basically each time it increments the list of duplicates in the RG changes so that the second step can load them.
In this screen shot the items until #3 could be changed to reflect the “last item” if you are expecting to have many duplicates of the same “thing”
All of this was set up to simply place a number in the DB on the duplicate records that I would later delete using a backend workflow which is pretty straightforward and I have since deleted so now screen shot to show that setup…although I believe on this thread there are already some examples of this. I set mine up to be recursive.
In the end my way seems to be a very convoluted way about it and the next time I attempt this I will try to follow your example as it seems less complex.
Good to see how many different ways people are solving the same issue.