sql >> Database teknologi >  >> RDS >> Oracle

Automatisk inkrementelt datofelt og version oracle sql for en tabel

Jeg tror, ​​at din logik bruger merge og row_number() er på rette spor (selvom, formodentlig, partition by klausul er ikke nødvendig, da du allerede filtrerer på byen). Jeg udvidede det med yderligere logik til at håndtere datoerne:

  • den indledende effective_dt_from og endelig effective_dt_to bør efterlades urørt

  • ind imellem vil du øge datoer dag for dag fra '2017-01-01' .

Forespørgsel:

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. Er det dårlig praksis at udføre transaktionsstyring i controlleren?

  2. Hvordan får jeg en tilfældig standardværdi for en kolonne i MySQL/Rails

  3. Multi-sprog indekser med Laravel Scout og Algolia

  4. Sammenligning af datoværdier for CURDATE() med et fuldt tidsstempelfelt