sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLは、欠落している場合、前の行の値を使用します

    自己結合とウィンドウ関数を組み合わせることができます

    簡略化私はこのサンプル値でこの表を取ります:

    create table t ( a int, b int);    
    insert into t values 
    ( 1, 1),
    ( 2, Null),
    ( 3, Null),
    ( 4, 2 ),
    ( 5, Null),
    ( 6, Null);
    

    クエリでa trunc_uです およびb あなたのidです クエリは次のとおりです:

    with cte as (    
        select 
          t1.a, 
          coalesce( t1.b, t2.b, 0) as b,
          rank() OVER 
           (PARTITION BY t1.a ORDER BY t2.a DESC) as pos
        from t t1 
        left outer join t t2
          on t2.b is not null and
             t2.a < t1.a    
    )
    select a, b
    from cte
    where pos = 1;
    

    そして結果:

    | A | B |
    ---------
    | 1 | 1 |
    | 2 | 1 |
    | 3 | 1 |
    | 4 | 2 |
    | 5 | 2 |
    | 6 | 2 |
    


    1. PostgreSQLはより多くの出力を無効にします

    2. T-SQLを使用してSQLServerデータベース内のトリガーのリストを返す2つの方法

    3. VPS/専用サーバーでPostgreSQLを入手する方法

    4. MariaDBでのDIVのしくみ