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

PostgreSQLのフィールド順に基づいて2番目に高い値から最も低い値のレコードを取得する方法

    それを行うには多くの方法がありますが、ウィンドウ関数で遊んでみたい場合は、RANK() またはDENSE_RANK() IDで重みを付け、外部クエリの最初のランクを削除します:

    WITH cte AS (
      SELECT id, ('{user,'||index-1||'}')::text[] as json_path, (value->'user_weight')::text::numeric AS weight
      FROM user_table, jsonb_array_elements(json_field->'user')
      WITH ordinality arr(value, index) 
      WHERE arr.value->>'user_name' IN ('Devang', 'Meet') 
      ORDER BY id, value->'user_weight' DESC
    ) 
    SELECT * FROM (
      SELECT cte.*, 
        RANK() OVER (PARTITION BY id ORDER BY id,weight DESC
                     RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS r
      FROM cte) j
    WHERE r > 1;
    

    デモ: db<>fiddle



    1. 私の場合、OracleでSQLを作成するにはどうすればよいですか?

    2. PostgreSQLで週の開始日と終了日の文字列を取得するにはどうすればよいですか?

    3. SOLRドキュメントおよびその他に関する質問

    4. 2番目のフィールドの自動インクリメントを使用した2つのフィールドのSQLServer固有の複合キー