create table #tab (ICNO varchar(8) , DATE datetime,     BALANCE float ,ICLINENO int )
go
insert into #tab values('0001',           '2005/10/01',      100,            10)
insert into #tab values('0001' ,          '2005/10/02',       99,            11)
insert into #tab values('0001'  ,         '2005/10/02',       98,            12)
insert into #tab values('0002'   ,        '2005/10/01',       60,            30) 
insert into #tab values('0003'    ,       '2005/10/01',       60,            30)  
insert into #tab values('0004'     ,      '2005/10/02',       70,            40)  
insert into #tab values('0001'      ,     '2005/10/03',       97,            13)  
insert into #tab values('0002'       ,    '2005/10/02',       59,            31)  
insert into #tab values('0001'        ,   '2005/10/04',       96,            14)  
insert into #tab values('0002'         ,  '2005/10/02',       58,            32)  
insert into #tab values('0003'          , '2005/10/02',       59,            31) 
insert into #tab values('0002'          , '2005/10/03',       57,            33)
goselect * from #tab t
where (select count(DATE) from #tab where ICNO=t.ICNO and ICLINENO>=t.ICLINENO)<=3
order by t.ICNO,t.DATE