PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać rekord od drugiej najwyższej do najniższej wartości na podstawie kolejności według pola w PostgreSQL?

Jest na to wiele sposobów, ale jeśli masz ochotę pobawić się funkcjami okna, możesz RANK() lub DENSE_RANK() wagi według id i wyeliminowanie pierwszych rang w zewnętrznym zapytaniu:

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;

Demo:db<>fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP 2.2 z PostgreSQL Nieudane wstawienie nowego wiersza - Błąd bazy danych:Niezdefiniowana tabela:7 BŁĄD:relacja table_id_seq nie istnieje

  2. Jak ustawić limit rozmiaru danych typu int w PostgreSQL 9.5?

  3. „uwierzytelnianie hasła nie powiodło się dla postgres użytkownika”

  4. Mapowanie tablicy za pomocą Hibernate

  5. Przekaż tablicę tagów do funkcji plpgsql i użyj jej w warunku WHERE