oracle 每行数据的字段值相减的问题。如图:

其中,requestid不固定,就是说也会有14115,14116,同时,而每个requestid也不确定会有多少行数据。求最后那列的值,就比方说,看图14414数据,有... 其中,requestid不固定,就是说也会有14115,14116,同时,而每个requestid也不确定会有多少行数据。求最后那列的值,就比方说,看图14414数据,有5行数据,第一行减第二行的数据为5分钟,第三行减第2行的为13分钟,以此类推,如果下一行数据的requestid与上一行的requestid不同,则用sysdate减去最后那行数据。。看图中红色部门,就是没算出来。跪求各位老大....... 展开
 我来答
yy_baduba
推荐于2017-11-24 · TA获得超过348个赞
知道答主
回答量:82
采纳率:100%
帮助的人:133万
展开全部
你用这个SQL试试,如果不行的话再Hi我,谢谢!
SELECT requestid,czsj,nvl(MIN(czsj) over(PARTITION BY requestid ORDER BY czsj rows BETWEEN 1 following AND 2 following),sysdate) - czsj sjjg FROM 表名 order by requestid,czsj;
祝学习愉快
追问
实力很雄厚,呵,再给你个图,然后给你解释下。第一列,requestid,第二列:创建时间(czsj),根据不同的请求ID,看有颜色标识的部分,第一个13438为三行数据,得到第二行减去第一行的CZSJ,第三行减去第二行的时间,那么第三行,肯定就需要用sysdate减了。然后再下一个requestid,以此类推下去,每个requestid对应的行数不固定,每个requestid也不固定,图只代表一部分。有劳了。
追答
这个和上边哪个图是一样的,我给你的SQL就能实现,方便的话扣我250267873
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-29
展开全部
try:
select requestid,
czsj,
floor(dif) || '天' || floor((dif - floor(dif)) * 24) || '小时' ||
mod(floor((dif - floor(dif)) * 24 * 60), 60) || '分钟'
from (select requestid,
czsj,
nvl(lead(czsj) over(partition by requestid order by czsj),
sysdate) - czsj dif
from tab)
order by 1, 2
更多追问追答
追问
lead是在所有集合中用的下一行数据减去上一行,而我的那个数据必须得根据requestid来区分,所以这个不可取。
追答
而我的那个数据必须得根据requestid来区分
lead(czsj) over(partition by requestid order by czsj)
其中partition by requestid 就是根据requestid来区分
可以给你个例子:

with tab as(
select 14414 requestid, sysdate - 10 czsj from dual
union all
select 14414 requestid, sysdate - 9.5 czsj from dual
union all
select 14414 requestid, sysdate - 0.3 czsj from dual
union all
select 14415 requestid, sysdate - 2.4 czsj from dual
union all
select 14415 requestid, sysdate - 0.1 czsj from dual
)
select requestid,
czsj,
floor(dif) || '天' || floor((dif - floor(dif)) * 24) || '小时' ||
mod(floor((dif - floor(dif)) * 24 * 60), 60) || '分钟'
from (select requestid,
czsj,
nvl(lead(czsj) over(partition by requestid order by czsj),
sysdate) - czsj dif
from tab)
order by 1, 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lake_cx
2011-10-29 · TA获得超过166个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:175万
展开全部
这个思路看行不行...
select requestid, czsj, sjjg into tmp1 from ... order by requestid, czsj;
select rownum id, requestid, czsj, sjjg into tmp2 from tmp1;
select a.requestid, a,czsj, nvl(b.czsj, sysdate)-a.czsj sjjg from tmp2 a, tmp2 b where a.id(+) = b.id - 1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ca53fc074
2021-07-16
知道答主
回答量:1
采纳率:0%
帮助的人:456
展开全部
如果用java语言的话该怎么实现呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式