Один из подходов состоит в том, чтобы начать со стола, который имеет все годы заботы.Затем вы можете подсчитать количество активных сотрудников в этом году.
Например,
select y.year,
(select count(*)
from t
where year(t.startdt) <= y.year and
(year(t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year union all
select 2012 as year union all
. . . -- continue for the years of interest
) y;
При этом используется функция year()
, которая не является стандартной, но доступна во многих базах данных.Официальная функция: extract(year from startdt)
.
. В Oracle вы можете выразить это как:
select y.year,
(select count(*)
from t
where extract(year from t.startdt) <= y.year and
(extract(year from t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year from dual union all
select 2012 as year from dual union all
. . . -- continue for the years of interest
) y;