Oracle
 sql >> база данни >  >> RDS >> Oracle

Автоматично нарастващо поле за дата и версия на oracle sql за таблица

Мисля, че вашата логика използва merge и row_number() е на прав път (въпреки че, вероятно, partition by клаузата не е необходима, тъй като вече филтрирате по града`). Разширих го с допълнителна логика за обработка на датите:

  • първоначалният effective_dt_from и окончателен effective_dt_to трябва да бъдат оставени недокоснати

  • между тях искате да увеличавате датите ден след ден, започвайки от '2017-01-01' .

Заявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (Oracle SQL) Прихващане на уникална грешка в ограничението

  2. UPSERT в таблица с име на динамична таблица

  3. Как изпълнявате SQL от bash скрипт?

  4. Как да получите максимум за поле въз основа на дата и да получите и други полета?

  5. dbms_metadata.get_ddl не работи