sql >> Databasteknik >  >> RDS >> Oracle

Automatiskt inkrementellt datumfält och version oracle sql för en tabell

Jag tror att din logik använder merge och row_number() är på rätt spår (även om, förmodligen, partition by klausul behövs inte, eftersom du redan filtrerar på staden). Jag utökade det med ytterligare logik för att hantera datumen:

  • den initiala effective_dt_from och sista effective_dt_to bör lämnas orörd

  • däremellan vill du öka datum dag för dag från och med '2017-01-01' .

Fråga:

merge into test t
using (
    select
        t.*,
        row_number() over(order by loc_sid asc) rn,
        count(*) over() cnt
    from test t
    where city = 'Chicago'
) t1
on (t1.loc_sid = t.loc_id)
when matched the update set
    t.version = t1.rn,
    t.effective_dt_from = 
        case 
            when rn = 1 then t.effective_dt_from
            else date '2017-01-01' + rn - 2
        end,
    t.effective_dt_to = 
        case 
            when rn = cnt then t.effective_dt_to
            else date '2017-01-01' + rn - 1
        end



  1. Python MySQL ReferenceError:objekt med svag hänvisning finns inte längre

  2. bilder laddas upp men jag kan inte se dem

  3. MySQL tror att underfrågan härleds när den inte är det!

  4. Ansluter .NET på Linux till en ODBC-datakälla