AmKad,
with s as(
select 'Клиент_1' client, +100 sm, to_date('01.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', -50, to_date('02.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', -20, to_date('03.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', +90, to_date('04.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', -70, to_date('04.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', -20, to_date('06.03.2011', 'dd.mm.yyyy') dt from dual union all
select 'Клиент_1', -20, to_date('07.03.2011', 'dd.mm.yyyy') dt from dual)
select client, sm, dt, fv
from
(select s.*,
nvl(min(case when sm > 0 then dt end) over (partition by client order by dt rows between 1 following and unbounded following),
max(dt) over ()
) fv
from s
)
where sm > 0;
lynx, ubuntu