Berikut adalah kueri yang secara naif menggabungkan dua kueri di atas, jadi pastikan Anda memeriksa dan membandingkan keluaran dari kedua metode tersebut.
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;
Tidak perlu menggunakan tabel sementara dan kemudian menghapus catatan setelahnya untuk mendapatkan hasil yang diperlukan. Meskipun, mungkin ada alasan untuk penggunaannya, mungkin kinerja?
Juga, sepertinya kueri dan bergabung dengan USER
tabel tidak diperlukan karena USER_ID
tersedia dari USER_ROLES
. Saya telah menghilangkannya dari kueri di atas. Semoga itu memberi Anda awal yang baik untuk meningkatkannya.