2016-09-29 11 views
0

私は応答と質問idを持つテーブルと同様に、IDを生成したい ウィンドウ関数

| id | question_id | 
| 1 | 1   | 
| 2 | 2   | 
| 3 | 1   | 
| 4 | 2   | 
| 5 | 2   | 

のように見える私のPostgresデータベースに「回答」テーブルを持っています明らかに、「(responses.id順)で遅れ(responses.id)」を引っ張るよう

| id | question_id | lag_resp_id | 
| 1 | 1   |    | 
| 2 | 2   |    | 
| 3 | 1   | 1   | 
| 4 | 2   | 2   | 
| 5 | 2   | 4   | 

として同じ質問IDを持つ前応答、に関わらずquestion_idの以前の応答IDを引っ張ってきます。私は以下のサブクエリを試みましたが、基本的にサブクエリの各質問IDのすべてのラグIDのテーブルを作成しているので間違っていることがわかります。

select 
    responses.question_id, 
    responses.id as response_id, 
    (select 
     lag(r2.id, 1) over (order by r2.id) 
    from 
     responses as r2 
    where 
     r2.question_id = responses.question_id 
    ) 
from 
    responses 

私が使用する方法がわからないこれは、私はサブクエリと正しい軌道に乗ってるかどうかは分からない、または私は「によってパーティション」を伴う可能性がある(より高度な何かをする必要がある場合)。

ご協力いただければ幸いです。

答えて

1

partition byを使用してください。ここでは相関サブクエリは必要ありません。

​​
関連する問題