数据库 sql2000 sql查询 查询不连续记录

来源:百度知道 编辑:UC知道 时间:2024/06/18 23:06:12
数据库 sql2000 sql查询:一案例,学生刷卡消费过程产生表A(消费次数,发生金额,剩余金额,姓名,时间,卡号)

消费次数是卡消费记录自变量,现在表中有记录丢失,也就是消费次数不连续,现需要查询出丢失记录的金额及详细
第1条记录
第2条记录
第3条记录
第4条记录
第6条记录





第N条记录

查询 N-(N-1)不等于0的记录片

注:N为消费次数
就是要查询某人
条件: 第N次的剩余金额 加上第N次发生金额 不等于A表中此人上次消费记录中剩余金额

的相差金额

--缺消费次数的学号 卡号
select 学号,卡号,max(消费次数) MAX次数,min(消费次数) MIN次数 into #a
from 消费原始记录 group by 卡号 having count(1)<max(消费次数)-min(消费次数)+1
select * from #a

--缺消费次数的上下消费记录
drop table #b
select a.卡号,a.发生金额,a.卡中金额,a.时间,a.消费次数 into #b
from 消费原始记录 a inner join #a b on a.卡号=b.卡号 and a.消费次数<>b.max次数 left join
消费原始记录 c on a.卡号=c.卡号 and a.消费次数+1=c.消费次数 where c.卡号 is null
union all
select a.卡号,a.发生金额,a.卡中金额,a.时间,a.消费次数
from 消费原始记录 a inner join #a b on a.卡号=b.卡号 and a.消费次数<>b.min次数 left join
消费原始记录 c on a.卡号=c.卡号 and a.消费次数-1=c.消费次数 where c.卡号 is null

通过判断上笔剩余金额减去当前剩余金额,看是否等于消费金额,若是,就可以查出当前数据并没有丢失

如果一张卡就丢一条记录的话还可以计算,如果丢失多条估计就没办法了

查询 N-(N-1)
那不是第一条吗`?

你要查表里没有的记录?

n-(n-1)!=1?