У меня есть две таблицы, подобные этой:
Мастер стол:
ID|start|end |Type|Year
--+-----+----+----+-----
1 |0.00 |3.50|1 |2018
1 |6.50 |7.25|0 |2018
2 |10.6 |12.1|1 |2019
Таблица данных:
ID|start|end |Type|Year|Dir
--+-----+----+----+----+----
1 |0.00 |1.11|1 |2018|U
1 |1.88 |3.00|3 |2018|U
1 |3.00 |3.50|4 |2018|U
1 |3.00 |3.25|5 |2018|D
1 |3.25 |3.50|5 |2018|D
Я пытаюсь получить начальные и конечные данные, которые отсутствуют в таблице данных.
Например, в таблице данных отсутствует строка с началом 1.11 и концом 1.88, вот что я хочу вот так:
Таблица результатов:
ID |start|end |Year
---+-----+----+----
1 |1.11 |1.88|2018
Запрос, который я до сих пор делал для соединения двух таблиц, выглядит так:
select distinct
b.id, a.type, a.start, a.end
from
dbo.master b
left outer join
data a on a.id = b.id
and (a .start + a .end) / 2 >= b.start
and (a .start + a .end) / 2 < b.end
where
a.type = 0
group by
b.id, b.year
Следующий запрос - выполнить некоторые вычисления в таблице данных:
with cte as
(
select distinct
row_number() over (partition by y.id, y.Year order by y.start) rn,
y.start, y.end, y.end - y.start length, y.id, y.Year, y.Type
from
dbo.data y
where
(y.Type = 1 or y.type = 3 or y.Type = 4)
group by
y.id, y.year
)
select a.*, Cast(sum(b.length) as float) as cumulative_length
from cte a
join cte b on a.rn >= b.rn
group by a.rn, a.id, a.Year, a.length, a.start, a.ent, a.Type
Трудно установить связь с главной таблицей. Любая помощь приветствуется.