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

PostgreSQLウィンドウ関数はNULL値を無視します

    私はあなたがただすることはできないと思います:

    select
    from tbl_x
    window w as (partition by ID order by Date)
    where col_a is null;
    

    そうでない場合は、次のことを行う必要があります。

    select
    Col_A,
    Col_B,
    case when Col_A is null
      then (select col_a
              from tbl_x x2
             where x2.id = x1.id
               and col_a is not null
               and x2.date < x1.date
          order by date desc
             limit 1)
      else Col_A
      end Col_A_Lag,
    case when Col_B is null
      then (select col_b
              from tbl_x x2
             where x2.id = x1.id
               and col_b is not null
               and x2.date < x1.date
          order by date desc
             limit 1)
      else Col_B
      end Col_B_Lag
    from tbl_x x1;
    

    適切なインデックスを作成すれば、パフォーマンスはおそらくかなり良いでしょう。

    create index ... (id, date desc, col_b) where col_b is not null;
    



    1. h2のミリ秒単位のCURRENT_TIMESTAMP

    2. MacにSQLServerをインストールする方法

    3. オブジェクトを永続化するときのNonUniqueObjectException

    4. PHPPDOとMySQLi