Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak modelować dane, które powoli zmieniają się w czasie?

Miałem podobny problem - duże pliki płaskie importowane do bazy raz dziennie. Większość danych pozostaje niezmienna.

Dodaj dwie dodatkowe kolumny do tabeli, data_początkowa i data_końcowa. Domyślna wartość ending_date powinna być w przyszłości.

Aby porównać jeden plik z drugim, posortuj je według kluczowych kolumn, a następnie odczytaj jeden wiersz z każdego pliku.

  • Jeśli klucze są równe:porównaj pozostałe kolumny, aby sprawdzić, czy dane się zmieniły. Jeśli dane wiersza są równe, wiersz jest już w bazie danych i nie ma nic do zrobienia; jeśli jest inny, zaktualizuj istniejący wiersz w bazie danych o dzisiejszą datę_końcową i wstaw nowy wiersz z dzisiejszą datą_początkową. Przeczytaj nowy wiersz z obu plików.
  • Jeżeli klucz ze starego pliku jest mniejszy:wiersz został usunięty. Zaktualizuj ending_date do dzisiaj. Przeczytaj nowy wiersz ze starego pliku.
  • Jeżeli klucz z nowego pliku jest mniejszy:wstawiono wiersz. Wstaw wiersz do bazy danych z datą początkową dzisiejszą. Przeczytaj nowy wiersz z nowego pliku.

Powtarzaj, aż przeczytasz wszystko z obu plików.

Teraz, aby wyszukać wiersze, które były prawidłowe w dowolnym dniu, po prostu wybierz z klauzulą ​​WHERE test_date między datą_początkową a datą_końcową.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest różnica między char, nchar, varchar i nvarchar w programie SQL Server?

  2. Wybierasz przedostatni wiersz z tylko jednym zaznaczeniem w programie SQL Server?

  3. Naucz się projektowania baz danych w SQL Server Management Studio (SSMS) — część 2

  4. DATEDIFF() zwraca nieprawidłowe wyniki w programie SQL Server? Przeczytaj to.

  5. SQL Server:Jak pogrupować wartości wielu wierszy w oddzielne kolumny?