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

PostgreSQL last_value ignoruje wartości null

To czego chcesz to lag(ignore nulls) . Oto jeden ze sposobów na zrobienie tego, co chcesz, używając dwóch funkcji okna. Pierwszy definiuje grupowanie dla NULL wartości, a drugi przypisuje wartość:

select idx, value, coalesce(value, max(value) over (partition by grp))
from (select b.*, count(value) over (order by idx) as grp
      from base b
     ) b
order by idx;

Możesz to również zrobić bez podzapytań, używając tablic. Zasadniczo weź ostatni element nie liczący NULL s:

select idx, value, 
       (array_remove(array_agg(value) over (order by idx), null))[count(value) over (order by idx)]
from base b
order by idx;

Tutaj to db<>skrzypce.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napisz Postgres Pobierz lub utwórz zapytanie SQL

  2. Alternatywny format wyjściowy dla psql

  3. postgresql - nie można utworzyć bazy danych - OperationalError:dostęp do szablonu źródłowej bazy danych1 mają inni użytkownicy

  4. WSTAW lub AKTUALIZUJ dane zbiorcze z dataframe/CSV do bazy danych PostgreSQL

  5. Jakiego NpgsqlDbType należy użyć do usunięcia błędu Can't write CLR type