Programim dhe zhvillim, javascript, python, php, html

Regjistrime me data të mbivendosura

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_datestart_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 withaddress_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?

25.02.2016

  • A mund të përfshini tabelën tuaj të dëshirave pas përditësimit? Ju lutemi lexoni Si të pyesni Dhe këtu është një vend i mrekullueshëm për START për të mësuar se si të përmirësoni cilësinë e pyetjes suaj dhe të merrni përgjigje më të mira. 25.02.2016
  • Mendoj se mund t'ju duhet të trajtoni vlerat null si një rast i veçantë në Oracle. Ju duhet të kontrolloni nëse një datë is NULL përpara se të përpiqeni ta krahasoni atë. 25.02.2016
  • id i adresës person_id start_data e ndalimit_date adresa 1 123 01-JAN-15 30-APR-15 india 2 123 01-MAY-15 null Rusia 3 321 01-JAN-15 09-MAY-15 us 4 321 10-MA -- tavolina e deshiruar 25.02.2016
  • është një tabelë e vetë-bashkimit e adresave në rezultatet e marrjes së nënpyetjeve bazuar në atë që dua të përditësoj të njëjtën tabelë të adresave 25.02.2016
  • Ju lutemi shtoni informacione të reja në pyetje, veçanërisht nëse ajo duhet të formatohet për të qenë e lexueshme. 25.02.2016

Përgjigjet:


1

Ju mund të përdorni një përditësim të ndërlidhur:

update addresses a
set stop_date = (
  select min(start_date) - 1
  from addresses
  where person_id = a.person_id
  and start_date > a.start_date
  and start_date <= a.stop_date
)
where exists (
  select null
  from addresses
  where person_id = a.person_id
  and start_date > a.start_date
  and start_date <= a.stop_date
);

2 rows updated.

select * from addresses;

ADDRESS_ID  PERSON_ID START_DATE STOP_DATE ADDRESS  
---------- ---------- ---------- --------- ----------
         1        123 01-JAN-15  30-APR-15 india     
         2        123 01-MAY-15            russia    
         3        321 01-JAN-15  09-MAY-15 us        
         4        321 10-MAY-15            india     

Si nënpyetja set dhe nënpyetja exists kërkojnë një rresht për të njëjtin person, data e fillimit të të cilit është midis datës së fillimit dhe ndalimit të rreshtit aktual (që është pjesa e ndërlidhur). exists do të thotë vetëm llogaritë që përputhen janë përditësuar; pa këtë çdo rresht që nuk ka një mbivendosje do të përditësohej në null. (Nuk do të shihni ndonjë ndryshim me të dhënat e mostrës, por do të shihnit nëse do të kishit më shumë të dhëna).

25.02.2016
Materiale të reja

Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

Faketojeni derisa ta arrini me të dhënat false
A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

Si të përdorni kërkesën API në Python
Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

Një udhëzues hap pas hapi për të zotëruar React
Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

AI dhe Psikologjia — Pjesa 2
Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

Esencialet e punës ditore të kodit tim VS
Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..


© 2024 albai.ru, Programim dhe zhvillim, javascript, python, php, html