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

以前のnull以外の値を効率的に選択するにはどうすればよいですか?

    Postgresでも機能するSQLServerのこの答えを見つけました。これまでやったことがないので、テクニックはかなり賢いと思いました。基本的に、彼は、ネストされたクエリ内でcaseステートメントを使用して、ウィンドウ関数のカスタムパーティションを作成します。このステートメントは、値がnullでない場合は合計をインクリメントし、それ以外の場合はそのままにします。これにより、すべてのnullセクションを前のnull以外の値と同じ番号で描くことができます。クエリは次のとおりです:

    SELECT
      id, value, value_partition, first_value(value) over (partition by value_partition order by id)
    FROM (
      SELECT
        id,
        value,
        sum(case when value is null then 0 else 1 end) over (order by id) as value_partition
    
      FROM p
      ORDER BY id ASC
    ) as q
    

    そして結果:

     id | value | value_partition | first_value
    ----+-------+-----------------+-------------
      1 |   100 |               1 |         100
      2 |       |               1 |         100
      3 |       |               1 |         100
      4 |       |               1 |         100
      5 |       |               1 |         100
      6 |       |               1 |         100
      7 |       |               1 |         100
      8 |   200 |               2 |         200
      9 |       |               2 |         200
    (9 rows)
    


    1. Oracleで行を列に動的にピボットする

    2. mySQLエラー1040:接続が多すぎます

    3. OracleでMicrosoftEntityFrameworkを使用できますか?

    4. SQLServer比較演算子のリスト