刷卡,取每一个卡号的最后三次记录的问题

数据库:MSSQL

表:
ICNO(卡号)    DATE(日期)     BALANCE(余额)  ICLINENO(卡流水号)
0001           2005/10/01      100            10
0001           2005/10/02       99            11
0001           2005/10/02       98            12
0002           2005/10/01       60            30 
0003           2005/10/01       60            30 
0004           2005/10/02       70            40 
0001           2005/10/03       97            13 
0002           2005/10/02       59            31 
0001           2005/10/04       96            14 
0002           2005/10/02       58            32 
0003           2005/10/02       59            31
0002           2005/10/03       57            33
要求结果:
ICNO(卡号)    DATE(日期)     BALANCE(余额)  ICLINENO(卡流水号)
0001           2005/10/02       98            12
0001           2005/10/03       97            13
0001           2005/10/04       96            14
0002           2005/10/02       59            31
0002           2005/10/02       58            32
0002           2005/10/03       57            33
0003           2005/10/01       60            30
0003           2005/10/02       59            31
0004           2005/10/02       70            40
想要每一个卡号(ICNO)的最后三次记录,记录多于三次就取最后三次记录
-----------------------------------
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)
go
select * from #tab t
where (select count(DATE) from #tab where ICNO=t.ICNO and ICLINENO>=t.ICLINENO)<=3
order by t.ICNO,t.DATE
-----------------------------------
注:本来感觉这问题和我前几天做的那个“取前几名的例子”问题一样呢。后来发现有ICLINENO(卡流水号)这个字段,这样出现重复日期的问题就可以处理了,解决了Sybase下无TOP的问题。看来对于某些需求,加个唯一(或者在组内唯一)的字段还是很有必要的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值