Połączenie tabeli ze zdublowanymi wierszami - TOP 1

Połączenie tabeli ze zdublowanymi wierszami - TOP 1
KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 471
0

Cześć,
mam taki problem:
Mam tabelę Wyplaty, która przechowuje IdPracownika w tabeli Pracownicy.
Problem jest taki, że tabela Pracownicy obok IdPracownika ma również zwykłe ID. Różnica jest taka, że IdPracownika identyfikuje pracownika, który może mieć wiele aktualizacji - każda aktualizacja tworzy nowe ID, ale IdPracownika jest stałe (identyfikuje pracownika).
Czyli w tabeli Pracownicy możemy mieć dwa wpisy o ID = 1 i ID = 2, ale IdPracownika w obu przypadkach będzie równe 1 (dotyczy tego samego pracownika).

Problem jest taki, że tabela Wyplaty przechowuje właśnie IdPracownika. Obecnie potrzebuję wydobyć dane z tabeli Wyplaty w tym imię i nazwisko pracownika. Problem jest taki, że jak zrobię to w taki sposób tj.: SELECT * FROM Wyplaty WHERE ... INNER JOIN Pracownicy ON IdPracownika = WPL_IdPrac
to otrzymuję zdublowane wartości (z uwagi na wiele aktualizacji pracowników)...

W jaki sposób połączyć obie tabele tak, by tabela z Pracownikami była ograniczona tylko do najnowszych aktualizacji (najwyższe ID u danego pracownika)?
Z góry dziękuję za pomoc.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
1
Kopiuj
SELECT * 
FROM 
Wyplaty Wpl 
INNER JOIN (select 
                           row_number() over (partition by IdPracownika order by id desc ) r
                          , * 
                          from Pracownicy) P  ON IdPracownika = WPL_IdPrac and p.r = 1
UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
0

A czy na tabeli Pracownicy nie ma flagi, które dane są aktualne?

KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 471
0

@Panczo dziękuję za pomoc. Kompletnie tego nie rozumiem, ale jakoś obszedłem problem trochę dookoła :) Nie mniej jednak dziękuję.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.