Определить пробелы в столбце накопительной суммы :: SQL Server - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть две таблицы, подобные этой:

Мастер стол:

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

Трудно установить связь с главной таблицей. Любая помощь приветствуется.

...