PARTITION BY OVER を使用して、特定の列で行を「グループ化」しようとしています。PARTITION の使用についてはある程度理解していますが、パーティションを日付で「ブロック」したいと考えています。たとえば、
|col1|col2 |
| A |01/JAN/2012|
| A |01/FEB/2012|
| B |01/MAR/2012|
| B |01/APR/2012|
| A |01/MAY/2012|
そして、col1 でパーティション分割したいのですが、最後の A を最初の 2 つとは「異なる」ものにしたいのです。これは、日付が「B」行で区切られているためです。
私が使用する場合;
SELECT ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) AS RNUM, a.*
FROM table1 a;
それは降伏します。
|RNUM|col1|col2 |
| 1| A |01/JAN/2012|
| 2| A |01/FEB/2012|
| 3| A |01/MAY/2012|
| 1| B |01/MAR/2012|
| 2| B |01/APR/2012|
しかし、私が本当に欲しいのは;
|RNUM|col1|col2 |
| 1| A |01/JAN/2012|
| 2| A |01/FEB/2012|
| 1| B |01/MAR/2012|
| 2| B |01/APR/2012|
| 1| A |01/MAY/2012|
これは PARTITION BY OVER を使用して可能ですか? 現時点では、カーソルを使用してデータを解析し、「A」の 2 つのシーケンスを分離できるようにグループ ID を割り当てることに戻りましたが、これは非常に遅いです。
ありがとう、
マーク。