--Создание таблицы и индекса
create table test_gr (Col1 integer, Col2 integer, Per integer);
create index ind_1 on test_gr (col1,per);

--Заполнение таблицы и одно значение 11111 (Время выполнения: около 10 минут )
DO $$
DECLARE counter INT := 0;  
BEGIN  
	insert into test_gr(col1,col2,Per) values(11111,round(random()*100000),round(random()*100));
LOOP  
    counter := counter + 1;  
    insert into test_gr(col1,col2,Per) values(round(random()*100000),round(random()*100000),round(random()*100)); 
    if counter = 100000000 then exit;  
end if;  
END LOOP;  
END; $$

--Создание и заполнение таблицы фильтра
create temp table Cols (col integer);
insert into pg_temp.Cols values(11111); -- Реальное значение


--пример работы аналога СрезПоследних (с условием и без) для 3 таблиц во вложении (включено/отключено условие фильтра)
select T1.col1,T1.col2
from 
(select t6.col1,t6.col2
from (select t3.col1,t3.maxperiod,MAX(t5.col2) as maxcol2
from (select t4.col1,max(t4.per) as maxperiod
from test_gr t4
--where exists(select 1 from pg_temp.Cols t7 where T7.col = T4.col1) 
group by t4.col1) t3
inner join test_gr t5
on t3.col1 = t5.col1 and t3.maxperiod = t5.per
group by t3.col1,
t3.maxperiod) T2 
inner join test_gr T6
on T2.col1 = T6.col1 and T2.maxperiod = T6.per and T2.maxcol2 = T6.col2
) T1
where exists(select 1 from pg_temp.Cols t7 where T7.col = T1.col1) 
