Using sqlfiddle, I was able to test this:
WITH wos AS(
SELECT Id,
wo,
wodate,
LEAD( wodate, 1, '99991231') OVER( PARTITION BY Id ORDER BY wodate) AS enddate,
amount
FROM #workorder w
)
SELECT *
FROM wos w
LEFT
JOIN #revenue r ON r.Id = w.ID
AND r.revdate BETWEEN w.wodate AND w.enddate