błąd zapytania iloczyn kartezjański

0

Witam., Napisałem takie zapytanie, które powinno mi pokazać jaką pracownik ma ostatnią kategorię_zaszeregowania_id dla podanej kategorii zaszeregowania.
Oto treść zapytania:

select distinct ETAT, W.WPET_PARAM, F.WPET_KATEGORIA, W.WPET_KATEGORIA_ZASZEREG_ID, DATA
from (select F.WPET_PRAC as ETAT, F.WPET_KATEGORIA, max(F.WPET_DATA) as DATA
      from PL_WARPARET F
      where F.WPET_PARAM = 1 and
            F.WPET_KATEGORIA = 'IX'
      group by F.WPET_PRAC, F.WPET_KATEGORIA) F
join PL_WARPARET W on W.WPET_ID = WPET_ID
where W.WPET_PARAM = 1 and
      W.WPET_KATEGORIA = 'IX';

Oto wyniki zapytania:

screenshot-20210331160614.png

jest to iloczyn kartezjański, bo w miejscu na zaznaczeniu powinno być pokazany 8 w kolumnie wpet_katagoria_zaszereg_id
a tymczsem są złączane wszystkie wpet_katagoria_zaszereg_id jakie pojawiają się na tych osobach

screenshot-20210331160641.png

1

Nie JOINujesz F

0

@Marcin.Miga:

Marcin.Miga napisał(a):

Nie JOINujesz F

Ok rzeczywiście był błąd w joinowaniu. Teraz zapytanie wygląda tak:

select distinct ETAT, W.WPET_PARAM, W.WPET_KATEGORIA, W.WPET_KATEGORIA_ZASZEREG_ID, MAX_DATA
from (select F.WPET_PRAC as ETAT, F.WPET_KATEGORIa as kategoria, max(F.WPET_DATA) as MAX_DATA
      from PL_WARPARET F
      where F.WPET_PARAM = 1 and
            F.WPET_KATEGORIA = 'IX'
      group by F.WPET_PRAC, F.WPET_KATEGORIA)
join PL_WARPARET W on ETAT = W.WPET_PRAC
where W.WPET_PARAM = 1 and
      W.WPET_KATEGORIA = 'IX';

Jednak wyniki są nadal niezadowalające, bo w kolumnie WPET_KATEGORIA_ZASZEREG_ID dla jednego etatu nadal są dwie wartości. Przykładowo dla etatu 62 WPET_KATEGORIA_ZASZEREG_ID jest 8 i 47, a ma być tylko 8, bo tylko ta wartość odpowiada maksymalnej dacie.

screenshot-20210331222957.png

0

Tutaj był ostatecznie błąd w zapytaniu, bo powinien być dorzucony jeszcze jeden poziom grupowana przez WPET_KATEGORIA_ZASZEREG_ID. w podzapytaniu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1