如何检验最后一笔记录的余额值是否正确?
费用明细表:tbl_person_list
Lid Pid Lmoney Pmoney LDate
---------------------------------------
1 1 50 50 2008-2-11
2 2 50 50 2008-2-11
3 3 50 50 2008-2-11
4 1 50 100 2008-2-13
5 2 -56 -6 2008-2-13
6 3 100 150 2008-2-13
7 1 100 200 2008-2-14
8 3 150 300 2008-2-14
现在想写一个余额检验语句,即检查每个人的费用总和值(sum(Lmoney))是否与其最后一笔记录的余额值(Pmoney)相等
把不相等的人员信息(PID)列出来
如果有办法知道是从什么时间开始出现不相等的情况更好。
------解决方案--------------------
我试着写了一下,看执行结果是对了,不知道会不会隐含着什么BUG,现发出来,大家看看。
//解决每个Pid最小日期的错误
select *
from (select b.*
from (select pid,min(ldate) as ldate from test group by pid) a,test b
where a.pid=b.pid and a.ldate = b.ldate ) c
where c.Lmoney <> c.pmoney
union all
//解决比最小日期大的错误
select c.* from
(select distinct a.* from test a,test b where a.pid = b.pid and a.ldate > b.ldate) c
inner join
(select pid,sum(Lmoney) as m from test group by pid) d
on c.pid = d.pid
and c.pmoney <>d.m