sql >> Database >  >> RDS >> Oracle

Automatisch incrementeel datumveld en versie Oracle SQL voor een tabel

Ik denk dat je logica met behulp van merge en row_number() is op de goede weg (hoewel, vermoedelijk, de partition by clausule is niet nodig, omdat u al op de stad filtert). Ik heb het uitgebreid met extra logica om de datums te verwerken:

  • de eerste effective_dt_from en laatste effective_dt_to moet onaangeroerd blijven

  • daartussenin wil je de datums met de dag verhogen vanaf '2017-01-01' .

Vraag:

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. Hoe de taakresultaten van het SSIS-pakket controleren nadat de uitvoering ervan is voltooid?

  2. Hashing of codering van variabelen die in een url moeten worden verzonden

  3. Hoe te controleren of lat long binnen de stadsgrenzen valt?

  4. Dynamisch een database doorzoeken om te controleren op waarde