暂无图片
请教这个SQL(关于model)
我来答
分享
刘晓华
2024-05-09
请教这个SQL(关于model)
暂无图片 50M

如下图:model_test表emid,year1,S,A四个字段分别代表工号,年份,应有年假,已请年假

R列代表当前剩余的年假天数,需用model计算,现也计算出来了,公式如下:

R=上一行的R值+当前行的S值-当前行的A值

但我要在这个基础上进一步处理:同一个工号同一年份可能有两条或多条记录(一年分两段计算),如果当前行和上一行的年份是同一年,则按上面的规则累计,如果不是同一年还分两种情况,1是上一行的R值小于0则累加,如果大于0,上一行的R值当0来处理 (意思是上一年没请完的年假过期,而请多的要扣回),我在 rules后面用decode不行,求帮忙

建表和记录插入SQL在后面,



create table model_test(
emid varchar2(1),
year1 varchar2(4),
s number(4,1),
a number(4,1),
r number(4,1),
primary key(emid,year1));

insert into model_test values('A','2023',0,1.5,NULL);
insert into model_test values('A','2024',1.5,0,NULL);
insert into model_test values('A','2025',15,0,NULL);
insert into model_test values('A','2026',14,7,NULL);
commit;

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
刘晓华

select * from (select emid,year1,s,a,0 as r,rank() over(partition by emid order by year1) as rn from model_test)
model UNIQUE SINGLE REFERENCE
partition by(emid)
dimension by(RN as m)
measures(year1,s,a,r)
rules automatic order
(r[any]=decode(year1[cv()],
year1[cv()-1],
r[cv()-1],
decode(sign(r[cv()-1]),-1,r[cv()-1],0))+s[cv()]-a[cv()])
order by emid,year1; 

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
yBmZlQzJ

这个不是应该交给开发代码去做吗?干嘛要数据库去操作?

暂无图片 评论
暂无图片 有用 0
打赏 0
刘晓华
题主
2024-05-10
我就是开发...上面的问题我自己搞定了
mocking

你表结构又用工号和年份做主键。。。。。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle ADG 自动切换,怎么判断没有数据丢失?
回答 1
已采纳
ADG是通过日志进行数据同步的,只要日志能对上,数据就没问题,通过以下SQL查询主备的日志序列号是否一致,如果日志一致,数据就是没有丢失,主备数据也是一致的select'Primary:'"DBRol
请问Oracle ADG优化建议
回答 4
最大性能是对受DG库影响最小的,不太可能造成Standby库出问题,是否是主库性能不足造成进程被卡住造成的啊,还是多看看日志吧。
有没有语句可以查询Oracle中某个表的增删改查的时间点?
回答 4
这么细粒度的审计记录,可以考虑使用第三方运维管理平台来实现
Oracle timeStamp 时间类型相减是怎样的?
回答 1
已采纳
我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractionalsecondsprecision),可以是0to9,缺省是6
单步调试 package,报错
回答 3
MDSYS.SDOPOINTTYPE如果是MDSYS用户下的一个自定义TYPE,那么要看是否授予该TYPE相应权限给调试用户了。
请问各位大佬 这种事件怎么处理?
回答 2
impdp8个并行
关于Tablespace存储空间的问题
回答 3
有很多脚本,比如可用剩余多少天的那种,一般还是用语句查,或者10g的client依然很好用
最近用户总说连接到oracle后,长时间没操作,就提示连接断开,怎么设置?
回答 4
应该是防火墙超时,对长连接进行断开了
国内做MySQL分布式数据库比较好的厂商是哪家?
回答 2
中兴GoldenDB
使用数据泵报错:ora-06512
回答 2
您好,请检查残留进程和清理残留表【1】selectownername,jobname,operation,jobmode,state,attachedsessionsfromdbadatapumpjo