Här är en fråga som naivt kombinerar de två frågorna ovan, så se till att du kontrollerar och jämför utdata från de två metoderna.
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;
Det är inte nödvändigt att använda en tillfällig tabell och sedan radera poster efteråt för att få de resultat som krävs. Även om det kan ha funnits en anledning till dess användning, kanske prestanda?
Det ser också ut som frågan och gå med i USER
tabellen är onödig som USER_ID
är tillgänglig från USER_ROLES
. Jag har utelämnat det från frågan ovan. Förhoppningsvis ger det dig en bra start på att förbättra det.