В стандарте ANSI SQL и многих базах данных вы можете использовать рекурсивный CTE:
with recursive cte as (
select datestart as dte, datestart, dateend
from t
union all
select dte + interval '1 minute', datestart, dateend
from cte
where dte < dateend
)
select dte
from cte
order by datestart, dateend, dte;
Обратите внимание, что это синтаксис ANSI. Ключевое слово recursive
может быть запрещено некоторыми базами данных. Дата арифметики зависит от базы данных. Некоторые базы данных могут ограничивать число генерируемых строк, поэтому значения по умолчанию необходимо переопределить.
EDIT:
В SQL Server это будет:
with cte as (
select datestart as dte, datestart, dateend
from t
union all
select dateadd(minut, 1, dte), datestart, dateend
from cte
where dte < dateend
)
select dte
from cte
order by datestart, dateend, dte
option (maxrecursion 0);