Это намного проще в SQL Server. Вы можете использовать lag()
для определения пиков, совокупную сумму для определения результирующих групп, а затем row_number()
:
select nh.*, row_number() over (partition by symbol, high_grp order by close_date) as rank_by_new_high
from (select nh.*,
sum(case when prev_cp < close_price then 0 else 1 end) over (partition by nh.symbol order by nh.close_date) as high_grp
from (select nh.*,
lag(nh.close_price) over (partition by nh.symbol order by nh.close_date) as prev_cp
from #new_high nh
) nh
) nh
order by symbol, close_date;
Здесь - db <> fiddle. [ 115]
Вы не спрашиваете моего мнения, но я бы порекомендовал вам выполнять свою работу в SQL Server, а не в MS Access. Это гораздо более функциональная база данных.
попробуйте их...
// Tile all child forms horizontally.
this.LayoutMdi( MdiLayout.TileHorizontal );
// Tile all child forms vertically.
this.LayoutMdi( MdiLayout.TileVertical );
// Cascade all MDI child windows.
this.LayoutMdi( MdiLayout.Cascade );