2

この行を連結するために使用できる 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

? fromとは整数ピリオドの開始と終了であり、のto非分割ピリオドを選択する必要があると仮定しますid

正しい方向と例を探しているだけですが、これはgroup byorconnect byまたは何か他のものを使用して行うことができますか?

DBはOracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

4

3 に答える 3

1

たぶん似たようなもの:

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

于 2013-10-07T17:49:52.130 に答える
1
select id, max("from") as "from", max("to") as "to"
from (
  select 
    nvl(prv.id, nxt.id) id,
    nxt."from", 
    prv."to", 
    nvl2(nxt."to", 
      row_number() over (partition by nxt.id order by nxt."from"), 
      row_number() over (partition by prv.id order by prv."to")) rn
  from t prv full join t nxt on
    prv.id = nxt.id and prv."to" + 1 = nxt."from"
  where nxt."to" + prv."to" is null 
)
group by id, rn

フィドル

于 2013-10-07T18:03:37.663 に答える