题目:
公司规定一周内加班总和最多只能12个小时,多余的要去掉,去掉的规则是:某天加班超过1H的才能去,而且是依次大致平均的去除,(最小单位是1小时)
举例:
日期 工号 加班小时
周一 A001 6
周二 A001 2
周三 A001 1
周四 A001 5
周五 A001 7
----------------
共计加班:21H,超出9H
算法:
从周一开始依次删减,每天减1H(如果当天的加班时间>1H),一轮后如果还不够,再继续下一轮,直到刚好为12H为止(只对超过12H的而言)
最后的结果应该是:
日期 工号 加班小时
周一 A001 3 --减了3次
周二 A001 1 --减了1次
周三 A001 1 --减了0次
周四 A001 2 --减了3次
周五 A001 5 --减了2次
-----------------------
以上只列具体某一个人的,公司有好几千人,
实现要求:
用SQL语句实现,考虑到效率问题规定:
1.不能用游标
2.不能用循环
其它方法都可以
答案:
建立测试环境:
测试表:
CREATE SET TABLE TESTDB.testrecursive ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT
(
wkd CH