Oto zapytanie, które naiwnie łączy dwa powyższe zapytania, więc upewnij się, że sprawdziłeś i porównałeś wyniki z dwóch metod.
select
r.user_id, r.role_id, r.participant_code, max(status_id)
from
user_role r,
cmp_role c
where
r.role_id = c.role_id
and r.active in (0,1,3)
and r.participant_code is not null
and sysdate between r.effective_from_date and r.effective_to_date
and c.group_id = 3
group by
r.user_id, r.role_id, r.participant_code;
Nie jest konieczne używanie tabeli tymczasowej, a następnie usuwanie rekordów, aby uzyskać wymagane wyniki. Chociaż mógł być powód jego użycia, może wydajność?
Wygląda też jak zapytanie i dołączenie do USER
tabela jest niepotrzebna, ponieważ USER_ID
jest dostępny od USER_ROLES
. Pominąłem to w powyższym zapytaniu. Mam nadzieję, że to dobry początek jego ulepszania.