Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Automatisches inkrementelles Datumsfeld und Version Oracle SQL für eine Tabelle

Ich denke, dass Ihre Logik merge verwendet und row_number() ist auf dem richtigen Weg (obwohl vermutlich die partition by -Klausel ist nicht erforderlich, da Sie bereits nach der Stadt filtern). Ich habe es mit zusätzlicher Logik erweitert, um die Daten zu verarbeiten:

  • der anfängliche effective_dt_from und abschließend effective_dt_to sollte unberührt bleiben

  • Dazwischen möchten Sie die Daten ab '2017-01-01' Tag für Tag erhöhen .

Abfrage:

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