求大神写一条sql查询语句

上次余额充值金额当前余额姓名时间2.35100102.35张三02-153.55053.5张三03-1017.23200217.23张三04-1611.20100111.... 上次余额 充值金额 当前余额 姓名 时间
2.35 100 102.35 张三 02-15
3.5 50 53.5 张三 03-10
17.23 200 217.23 张三 04-16
11.20 100 111.20 李四 03-20
5.72 100 105.72 李四 04-15

这是正常的记录,每个人消费到没什么钱之后去充值,【上次余额】应该比【上一次】充值的【当前余额】要少,但是现在有一部分人的充值出现了错误,导致多充了钱,【上次余额】会大于上一次的当前余额

上次余额 充值金额 当前余额 姓名 时间
2.35 100 102.35 张三 02-15
521.23 50 571.23 张三 03-10
412.50 100 512.50 张三 04-16
11.20 100 111.20 李四 03-20
905.75 100 1005.75 李四 04-15

变成了这样的结果,现在我想查出来按人(姓名)来分组查询,得到出现问题的这些记录(上次余额大于上次充值当前余额的记录)
也就是筛选出正常的记录,只留下有问题的记录

如果问题不清楚可以补充,或者+QQ 364640740
展开
 我来答
彩虹下的微笑Mi
2012-04-16 · 超过65用户采纳过TA的回答
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:160万
展开全部
select 上次余额,充值金额,当前余额,姓名 ,时间,dbo.f_CheckData(用户ID,时间,上次余额) as flag
from table name
假设针对用户有唯一ID
create function f_CheckData(@用户ID,@时间,@上次余额)
returns char(1)
as
begin
declare @LastTimeSurplus float
declare @Flag char(1)
declare @count int
set @Flag ='N'
set @LastTimeSurplus =0
set @count =0
--取最近一笔充值记录,
select @count=count(1)FROM TABLENAME WHERE 用户ID=@用户ID and 时间< @时间 ORDER BY 时间 DESC
if @count>0
begin
获取该次结馀金额
SELECT TOP 1 @LastTimeSurplus FROM TABLENAME WHERE 用户ID=@用户ID and 时间< @时间 ORDER BY 时间 DESC

IF @LastTimeSurplus<@上次余额
set @flag='Y'
end
return @flag

end

这样FLAG取到Y的的就是有问题的了
bhtzu
2012-04-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4232万
展开全部
就是说说啊,这个表本身确实。。有点问题。
如果同一天同一个人充值2次,记录上怎么区分呢,如果姓名相同怎么区分呢。没有辅助的账单维护表和客户维护表,太可能出问题了,导致现在查询也不好考虑(因为没有唯一标识列,也没有主键顺序吧)
追问
呃,你说的这些都有的...我只是模拟出来一个有相关信息的表,时间是精确到秒的,主键和客户关系表都是有的..
追答
三楼兄弟思路基本和我一样,不赘述了。存储过程解决好些。如果是实际应用,不在乎是1条语句还是存储过程。输出的时候写到一个表里面,就比较直观了。肯定要递归或者循环解决
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ratcwork
2012-04-16
知道答主
回答量:35
采纳率:100%
帮助的人:12.3万
展开全部
select 上次余额,充值金额,当前余额,姓名,时间 from
表 where 上次余额>(充值金额+当前余额)
更多追问追答
追问
这个不行吧,我是要找【上次余额】会大于【上一次】的【当前余额】

关键在于上一次啊,也就是跨行查询..
追答
bhtzu 说的是呀。你这个数据表设计的不合理。

另外,你要非要这么设计,那你得想办法杜绝错误的充值记录。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式