Вы можете достичь функционала SQL Server LAG
, чтобы получить эту совокупную сумму:
select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0;
select *,
case when @lagDate = Date and @lagShop = Shop then @cumSum := @cumSum + @diffLag else @cumSum := 0 end,
@diffLag := Diffabcxyz,
@lagDate := Date,
@lagShop := Shop
from tbl
order by shop, date, hour
Демо
ОБНОВЛЕНИЕ относительно комментария:
Подскажите, пожалуйста, как я могу заставить его не делать кумулятивный подсчет за первые 3 часа?
select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0, @diffLagLag := 0;
select *,
case when @lagDate = Date and @lagShop = Shop then @cumSum := @cumSum + @diffLagLag else @cumSum := 0 end,
@diffLagLag := @diffLag,
@diffLag := Diffabcxyz,
@lagDate := Date,
@lagShop := Shop
from tbl
order by shop, date, hour
Еще одна демоверсия
ДРУГОЕ ОБНОВЛЕНИЕ:
select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0;
select *,
case when @lagDate = Date and @lagShop = Shop and Hour > 3 then @cumSum := @cumSum + @diffLag else @cumSum := 0 end,
@diffLag := Diffabcxyz,
@lagDate := Date,
@lagShop := Shop
from tbl
order by shop, date, hour
Еще одна демка