sql >> Databáze >  >> RDS >> Oracle

Automatické přírůstkové datum pole a verze Oracle SQL pro tabulku

Myslím, že vaše logika pomocí merge a row_number() je na správné cestě (ačkoli, pravděpodobně, partition by klauzule není potřeba, protože již filtrujete podle města). Rozšířil jsem to o další logiku, aby bylo možné zpracovávat data:

  • počáteční effective_dt_from a poslední effective_dt_to by měl zůstat nedotčen

  • mezitím chcete den po dni zvyšovat data počínaje '2017-01-01' .

Dotaz:

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. Problém s vazbou JOOQ json

  2. Převeďte ukládat/aktualizovat kolejnice hovorů na sql

  3. Zpracování záporných hodnot pomocí sql

  4. php exec() - mysqldump vytvoří prázdný soubor