Cherchez-vous quelque chose comme ça ?
select *
from MY_TABLE
where (id, name) in ((1,'new'), (2, 'old')) and
date between effectiveDate and termDate
Cela recherche les paires dans une liste, puis vérifie les dates entre une plage de dates.
MODIFIER :
Je pense que vous voulez diviser cela en plusieurs clauses, une pour chaque ensemble de valeurs :
where (id = 1 and name = 'new' and date between eff1 and term1) or
(id = 2 and name = 'old' and date between eff2 and term2) or
. . .