Voici une requête qui combine naïvement les deux requêtes ci-dessus, alors assurez-vous de vérifier et de comparer les résultats des deux méthodes.
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;
Il n'est pas nécessaire d'utiliser une table temporaire puis de supprimer des enregistrements par la suite pour obtenir les résultats requis. Bien qu'il y ait peut-être une raison à son utilisation, peut-être la performance ?
En outre, cela ressemble à la requête et à la jointure au USER
la table est inutile car le USER_ID
est disponible auprès de USER_ROLES
. Je l'ai omis de la requête ci-dessus. J'espère que cela vous donne un bon début pour l'améliorer.