In my associates table I have 4,978 people with at least 1 duplicate.
asscssn | count(*) --------- -------- 123456789 8 987654321 5 234567890 5
Each duplicate for a person has a unique id (asscid) in the associates table.
asscid | asscssn ------ ------- 53492 987654321 53365 987654321 53364 987654321 52104 987654321 50185 987654321
My cases table has a case tied to each asscid
docketnumber | asscid ----------- ------- 2010JV0000 53492 2010JV1111 53365 2010JV2222 53364 2010JV3333 52104 2010JV4444 50185
I would like to take each person that has a duplicate, grab the latest asscid that person has from the associates table and update the cases table. Results would be:
docketnumber | asscid ----------- ------- 2010JV0000 53492 2010JV1111 53492 2010JV2222 53492 2010JV3333 53492 2010JV4444 53492
Advertisement
Answer
If I understand correctly, you want:
select c.docketnumber, max_asscid from cases c join (select a.*, max(asscid) over (partition by asscssn) as max_asscid from associations a ) a on c.asscid = a.asscid;
This assumes that the “latest” asscid
is the one with the largest value. If you have another column that specifies the ordering (such as a date), then you can use first_value()
instead.
EDIT:
If you actually want to update the data:
update cases c set assc_id = (select max_asscid from (select a.*, max(asscid) over (partition by asscssn) as max_asscid from associations a where asscssn is not null ) a where a.asscid = c.asscid );