Ниже я создал пример, в котором я усредняю значение за 1994 год, чтобы вы начали.Запрос SQL должен работать в любой СУБД.Тем не менее, каждая база данных имеет лучший подход, если вы можете использовать специальные функции поставщика.Например, используя аналитику Oracle, вы можете вычислить скользящее среднее и получить доступ к предыдущей / следующей строке почти так же, как и хотели.
drop table t;
create table t(
item_code varchar(10) not null
,year int not null
,figure decimal(5,2) not null
,primary key(year, item_code)
);
insert into t(item_code, year, figure) values('A', 1990, 5);
insert into t(item_code, year, figure) values('A', 1991, 7.2);
insert into t(item_code, year, figure) values('A', 1992, 9.2);
insert into t(item_code, year, figure) values('A', 1993, 12.5);
insert into t(item_code, year, figure) values('A', 1994, 10);
insert into t(item_code, year, figure) values('A', 1995, 9);
insert into t(item_code, year, figure) values('B', 1990, 16);
insert into t(item_code, year, figure) values('B', 1991, 17);
insert into t(item_code, year, figure) values('B', 1992, 10);
insert into t(item_code, year, figure) values('B', 1993, 13);
insert into t(item_code, year, figure) values('B', 1994, 15.5);
insert into t(item_code, year, figure) values('B', 1995, 12);
insert into t(item_code, year, figure) values('C', 1990, 4);
insert into t(item_code, year, figure) values('C', 1991, 9);
insert into t(item_code, year, figure) values('C', 1992, 15);
insert into t(item_code, year, figure) values('C', 1993, 12);
insert into t(item_code, year, figure) values('C', 1994, 10);
insert into t(item_code, year, figure) values('C', 1995, 7.2);
select item_code
,1994 as year
,sum(case when year = 1995 then figure else 0 end) as next_year
,sum(case when year = 1994 then figure else 0 end) as this_year
,sum(case when year = 1993 then figure else 0 end) as prev_year
,sum(figure) / count(*) as avg
from t
where year in(1993, 1994, 1995)
group
by item_code
having count(*) = 3;
count (*) = 3 удовлетворяет условию, чтосреднее значение будет вычислено только при наличии трех лет.Очевидно, вы должны заменить константы некоторой переменной.Кроме того, запрос вычисляет только средние значения за 1 год.