Tak na szybko (MS SQL Server 2012+ , funkcje agregujące + OKNO) :
use tempdb
go
create table dbo.Zam
( Id int identity (1,1),
IdKlient int,
Wart int,
Data date
)
insert into dbo.Zam
values
(1,20000, '1999-01-28'),
(1,6000, '1999-02-15'),
(1,2500, '2000-05-05'),
(1,7000, '2002-12-20'),
(1,18000, '2003-08-11'),
(1,2000, '2005-06-01'),
(2,1000, '2012-04-22'),
(2,11000, '2013-08-19'),
(2,100000, '2013-05-05'),
(3,28000, '2002-12-20'),
(3,1500, '2005-10-18');
with VIP as
(
select * , CASE WHEN SUM(Wart) OVER( partition BY IdKlient ORDER BY DATA) >= 30000 THEN 'VIP' END AS TypKlienta
from dbo.Zam
),
VIP_data as
(
select IdKlient, MIN(Data) as Data , 'VIP' as TypKlienta
from VIP
where TypKlienta = 'VIP'
group by IdKlient
)
select z.IdKlient, SUM(z.Wart) as SumaZlecen, VIP_data.Data, VIP_data.TypKlienta
from dbo.Zam z left join
VIP_data on z.IdKlient = VIP_data.IdKlient
group by z.IdKlient, VIP_data.Data, VIP_data.TypKlienta
drop table dbo.Zam
Ewenetualnie można to rozwiązać podzpyatniem skorelowanym