sql - 通过根据两个(起始和终止)值计算非中断时间段进行分组

标签 sql oracle oracle11g group-by connect-by

可以使用哪种 Oracle SQL 技术来连接这些行:

id | from | to
--------------
 a |   20 | 25
 a |   26 | 30
 a |   32 | 40
 b |    1 |  5
 b |    7 | 10
 b |   11 | 20

对于这样的结果:

 a |   20 | 30
 a |   32 | 40
 b |    1 |  5
 b |    7 | 20

?假设fromto是整数周期的开始和结束,并且有必要为 id 选择不间断周期。的

只是寻找正确的方向和示例,可以使用 group by 来完成此操作吗?或connect by或者其他什么?

数据库是Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

最佳答案

也许类似的东西:

select
    field_id,
    min(field_from),
    max(field_to)
from (
    select
        field_from,
        field_to,
        field_id,
        sum(willSum) over(partition by field_id order by field_from) as GID
    from (
        select
            field_from,
            field_to,
            field_id,
            case when field_from
                    = Lag(field_to) over(partition by field_id order by field_from)
                 then 0 else 1 end as willSum + 1
        from
            rj_mytest
        )
    )
group by
    field_id,
    GID
order by
    field_id,
    min(field_from);

还有几个类似的例子:https://forums.oracle.com/thread/969005

关于sql - 通过根据两个(起始和终止)值计算非中断时间段进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229823/

相关文章:

mysql - 统计特定月份每天的所有记录

mysql - 获取一行中 2 行值的结果

sql - 在 Oracle 11g 上授予创建 View

sql - 甲骨文 :Compare dates only by the Hour

sql - 使用 IN 和 OUT 参数调用 Oracle 中的存储过程

SQL Server 2005事务复制无法发布包含索引创建的存储过程

c# - 如何连接两个表,以便结果包含第一个表的值之间的第二个表的值

sql - Oracle PL/SQL CASE 语句可以包含 SELECT 查询吗?

sql - 更新大型表的主表和子表的主键

mysql - 用于解密由 PBEWithMD5AndTripleDES 加密的值的 SQL 查询