The approach I usually take is:
1. Process the rows in DESC data order to assign an end date to each start date.
2. Generate a calendar table from min to max date.
3. IntervalMatch to create rows for every date in every range.
For an example of this, see the QV Cookbook sample "Fill values in a data range using previous values".