如图,我当前选中的行的I_qty都是是2,求出我所选中的所有行的最大时间-最小时间的差。(只要I_qty连续多行一样就要求时间差),希望各位大佬帮帮忙!
Oracle的分段查询,请各位大神帮忙看看!!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- 憧憬blog 2023-03-15 07:33关注
根据您的问题描述和图示,对于所选中的所有行,如果I_qty都是2,那么需要求出它们时间的差值。可以使用Oracle中的分段查询(Analytic Function)来实现。
具体实现方法如下:
首先,需要根据I_qty的连续性来生成分组,将I_qty连续相同的行作为一组。可以通过以下的SQL语句来生成分组:
SELECT I_qty, I_date,
ROW_NUMBER() OVER (ORDER BY I_date) AS rownum,
ROW_NUMBER() OVER (PARTITION BY I_qty ORDER BY I_date) AS groupnum
FROM mytable;接下来,通过分段查询,仅对I_qty为2的分组进行计算时间差。可以通过以下的SQL语句来获取时间差:
SELECT MAX(I_date)-MIN(I_date) AS time_diff
FROM (
SELECT I_qty, I_date,
ROW_NUMBER() OVER (ORDER BY I_date) AS rownum,
ROW_NUMBER() OVER (PARTITION BY I_qty ORDER BY I_date) AS groupnum
FROM mytable
)
WHERE I_qty=2
GROUP BY I_qty, (rownum-groupnum)
HAVING COUNT(*)>1;以上代码中,WHERE子句限制了只考虑I_qty为2的分组,GROUP BY子句根据分组号(rownum-groupnum)来将相同的分组聚合,HAVING子句筛选掉只有一个I_qty为2的分组的情况。
通过这种方式,就能够得到所需的时间差。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题
- ¥15 Python时间序列如何拟合疏系数模型
- ¥15 求学软件的前人们指明方向🥺