提出问题:
感谢itpub,感谢北京涅,感谢贵州。
sql起源:信息化检查,高经理让王经理查询一下各个项目部NC的使用情况,也就是查询出各个公司做账到了什么时候,近200个项目,我看到王经理一个个的NC进入,效率太低。
当时想到使用sql。
开始自己搞,可是实在不行,寻找itpub帮助,成功:
select * from (select UNITCODE, unitname, year, period, num1, row_number() over(partition by UNITNAME order by YEAR desc,period desc) mm from (select BD_CORP.UNITCODE, bd_corp.unitname, gl_voucher.year, gl_voucher.period, count(*) num1 from gl_voucher, bd_corp where bd_corp.pk_corp = gl_voucher.pk_corp and gl_voucher.dr='0' group by BD_CORP.UNITCODE, bd_corp.unitname, gl_voucher.year, gl_voucher.period) ) where mm = 1 ORDER BY UNITCODE;
效果图:
今天群里的上海萝卜提了一个类似要求,我们开始讨论,贵州给了一个sql:
SELECT ID,MIN(data) FROM 表名 GROUP BY ID;
我当时使用无所不能的partition,北京涅居然给我写出了一个简单有效的sql,太厉害(oracle也很厉害,它怎么就能year和period连接到一块,还能保证是一家的呢)。
select BD_CORP.UNITCODE,
bd_corp.unitname,
max(gl_voucher.year ||'-'|| gl_voucher.period)最新日期,
count(*) num1
from gl_voucher, bd_corp
where bd_corp.pk_corp = gl_voucher.pk_corp
and gl_voucher.dr = '0'
group by BD_CORP.UNITCODE, bd_corp.unitname
order by BD_CORP.UNITCODE
结果出来了,发现最新日期都是正确的,可是每月凭证数目前有问题(count(*))
继续研究这个凭证数量