Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Automatyczne przyrostowe pole daty i wersja Oracle SQL dla tabeli

Myślę, że twoja logika za pomocą merge i row_number() jest na właściwej ścieżce (chociaż prawdopodobnie partition by klauzula nie jest potrzebna, ponieważ już filtrujesz według miasta). Rozszerzyłem go o dodatkową logikę do obsługi dat:

  • początkowy effective_dt_from i końcowe effective_dt_to powinien pozostać nietknięty

  • pomiędzy, chcesz zwiększać daty dzień po dniu, zaczynając od '2017-01-01' .

Zapytanie:

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. Kreator Entity Data Model otrzymuje wyjątek podczas próby dodania nowego połączenia Oracle

  2. Jak usunąć maszynę wirtualną z VirtualBox?

  3. Konfiguracja połączenia między klientem a serwerem Oracle 10g

  4. Oracle - w tym zakresie nie istnieje funkcja o nazwie X

  5. Oracle:Połącz dwie tabele z różnymi kolumnami