現在の行の前にある順序付けられたパーティションの部分に、現在の行のフィールドの値が表示される回数をカウントするウィンドウ関数を作成したいと思います。これをより具体的にするために、次のようなテーブルがあるとします。
| id| fruit | date |
+---+--------+------+
| 1 | apple | 1 |
| 1 | cherry | 2 |
| 1 | apple | 3 |
| 1 | cherry | 4 |
| 2 | orange | 1 |
| 2 | grape | 2 |
| 2 | grape | 3 |
そして、そのようなテーブルを作成したいと思います(わかりやすくするために日付列を省略しています)。
| id| fruit | prior |
+---+--------+-------+
| 1 | apple | 0 |
| 1 | cherry | 0 |
| 1 | apple | 1 |
| 1 | cherry | 1 |
| 2 | orange | 0 |
| 2 | grape | 0 |
| 2 | grape | 1 |
の場合、順序付けられたパーティションに沿って移動すると、最初のエントリ「apple」は何にも一致しませid = 1
ん(暗黙のセットが空であるため)、次のフルーツ「cherry」も一致しません。次に、再び「アップル」に到達します。これは一致などです。SQLは次のようになっていると思います。
SELECT
id, fruit,
<some kind of INTERSECT?> OVER (PARTITION BY id ORDER by date) AS prior
FROM fruit_table;
しかし、私は正しく見えるものを見つけることができません。FWIW、PostgreSQL8.4を使用しています。