I was able to do it as follows since LIMIT and FETCH are currently not supported in subqueries in Denodo. Here the steps:
1. Create a derived view with an order by on joinval, e.g. CREATE VIEW VIEW2_ORDERED AS SELECT \* FROM VIEW2 ORDER BY JOINVAL DESC
2. Create a derived view using ordered view and adding a rank column, e.g. CREATE VIEW VIEW2_RANKED AS SELECT \* FROM VIEW2_ORDERED, ROWNUM() AS RANK
3. Filter this ranked view, e.g. SELECT \* FROM VIEW1 INNER JOIN (SELECT JOINVAL FROM VIEW2_RANKED WHERE RANK IN (1, 2, 3)) VIEW3 ON VIEW1.JOINVAL = VIEW3.JOINVAL
Hope this helps!