如图,我当前选中的行的I_qty都是是2,求出我所选中的所有行的最大时间-最小时间的差。(只要I_qty连续多行一样就要求时间差),希望各位大佬帮帮忙!
根据您的问题描述和图示,对于所选中的所有行,如果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的分组的情况。
通过这种方式,就能够得到所需的时间差。