逸珠 2019-04-30 13:18 采纳率: 0%
浏览 309

Oracle的分段查询,请各位大神帮忙看看!!

图片说明
如图,我当前选中的行的I_qty都是是2,求出我所选中的所有行的最大时间-最小时间的差。(只要I_qty连续多行一样就要求时间差),希望各位大佬帮帮忙!

  • 写回答

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 求学软件的前人们指明方向🥺