Unë kam një tabelë adresash, thuaj:
address_id person_id start_date stop_date address
1 123 01-JAN-15 01-JUN-15 india
2 123 01-MAY-15 null russia
3 321 01-JAN-15 01-JUN-15 us
4 321 10-MAY-15 null india
Unë dua të gjej të gjitha regjistrimet (vlerat address_id
) të cilat kanë data të mbivendosura për të njëjtën person_id
. Në këtë shembull do të gjenin address_id
2 dhe 4, pasi maji shtrihet midis janarit dhe qershorit.
Më pas dua të përditësoj stop_date
në start_date - 1
të rreshtit pasues që i përket të njëjtit person, në mënyrë që të hiqet mbivendosja. Për shembull, përditësimi stop_date
në 09-MAY-2015at row with
address_id` 3.
Kështu që unë dua të përfundoj me:
address_id person_id start_date stop_date address
1 123 01-JAN-15 30-APR-15 india
2 123 01-MAY-15 null russia
3 321 01-JAN-15 09-MAY-15 us
4 321 10-MAY-15 null india
E kam Provuar:
update (
select * from addresses a1,addresses a2
where a1.person_id = a2.person_id
and a2.start_date > a1.start_date and a2.start_date <a1.stop_date
)
set a1.stop_date = a2.start_date - 1;
Kjo funksionoi mirë në Microsoft Access, por në Oracle ishte një gabim i pavlefshëm identifikues për a2.start_date
.
Si mund ta kryej këtë përditësim?