0

Oracle 11g 用の SQL Developer を使用しています。

一連の日付をループできるようにする必要があります。上下の END_DATE が次の END_DATE よりも = または < または > であり、かつ START_DATE が異なるかどうかを確認します。

次に、その = と同じ旅行番号を割り当てるか、新しい旅行番号を割り当ててから、新しい旅行を開始し、次の日付セットを再度チェックして、現在の日付よりも = または < または > であるかどうかを確認します。

これを行うには、ループにpl/sqlカーソルを使用する必要があると思います..私はそれを理解しようとしましたが、私にはあまり意味がありません..

たとえば、最終結果を次のようにしたい..

ROWID   START_DATE END_DATE   TRIP
  1         30-DEC-11  1-Jan-12 1
  2         31-DEC-11  2-Jan-12 2
  3         31-DEC-11  2-Jan-12 2
  4         01-JAN-12  3-Jan-12 3
  5         03-JAN-12  4-Jan-12 4
  6         01-JAN-12  1-Jan-12 5
  7         02-JAN-12  4-Jan-12 6

よろしくお願いします。アレックス

4

1 に答える 1

1

持っているデータに基づいて、単純に日付のペアを列挙します。これは、dense_rank() でも実行できます。

select t.*,
       dense_rank() over (order by start_date, end_date) as trip
from t

データの場合、これにより順序が変更されます。ほぼ同じ順序を維持したい場合は、最初に集計し、最小行 ID を取得し、dense_rank() または row_number() を実行して、元のデータに結合します。

select t.*, trip
from (select start_date, end_date, row_number() over (partition by row_id) as trip
      from (select start_date, end_date, min(rowid) as rowid
            from t
            group by start_date, end_date
           ) a
     ) b join
     t
     on b.start_date = t.start_date and b.end_date = t.end_date
于 2012-08-27T16:33:24.877 に答える