2017-02-08 10 views
0

私はデータの複数の行に親を見つけようとしています。最初のレコードが親レコード(レコード#123)の3つのレコードがあるとしましょう。第1レコードへの返信であった第2レコード(レコード#945)は#123の親を持っています。しかし、2番目のメッセージに返信された3番目のレコード(レコード#567)は945の親を持っています。私は親に123を表示させ945では表示しません。(最終的には、メッセージ)下のチャートの例を参照してください。 postgresqlでこれを行う方法の助けを借りれば、非常に感謝しています。postgres経由でスレッドの先頭の親を見つける方法

header_id id parent FIELD_NEEDED 
87654311 123 null  123 
87654311 945 123  123 
87654311 567 945  123 
87654311 691 123  123 
87654311 876 null  876 
87654311 721 null  721 
87654311 108 721  721 
87654311 236 108  721 

答えて

0

使用再帰クエリ:

WITH RECURSIVE q(header_id, id ,parent,field_needed, root, pp) 
as (
    select header_id,id ,parent,field_needed,id as root, parent pp 
    from table1 t 
    union all 
    select q.header_id,q.id ,q.parent,q.field_needed,t.id, t.parent 
    from q 
    join table1 t 
    on t.id = q.pp 
) 
select header_id, id ,parent,field_needed, root 
from q 
where pp is null 
+0

どのようにあなたが 'field_needed' を算出していますか? – AmberLaw

関連する問題