日期:2014-05-17  浏览次数:20752 次

一个SQL语句的题目遇到问题了求解答
select rq,(如果这里写上xm,max(n)就没效果),max(n) from (select rq,(select xm from ryb r,jkjl j where r.gh=j.gh)xm,max(n) from (select extract(year from rq) rq ,r.xm,
(sum(case when fx=0 then je else 0 end)-sum(case when fx=1 then je else 0 end)) n 
from jkjl j,ryb r where j.gh=r.gh group by r.xm,extract(year from rq))group by rq)group by rq

题目是:查询每年累计金额(累计金额=收款- 付款)最多的人,生成如下结果的报表:(5分)
年 姓名 累计金额
2006 张先生 2750.25
2007 王小姐 10.00

或者还有其他好办法吗
sql

------解决方案--------------------
引用:
感谢大神 结果出来了 另外over里面貌似那个单词打错了。。  难怪运行老是错。。  
就是不明白的是 over是什么意思  为什么rn=1 就 把最高金额的筛选出来了


失误失误了、 纯手工回复的 难免几个打错..

over 开窗函数 在oracle里面经常会用到 功能非常强大 LZ可以百度研究下 

最里面一层 是求每个人每天累计金额
中间一层是根据年份分组 按累计金额倒排序  rn就是排名金额最高排第一
最外面一层 就是取所有排名第一的数据 也就是每年排第一的人和金额