sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan vælger jeg effektivt den tidligere ikke-nul værdi?

Jeg fandt dette svar til SQL Server, der også fungerer i Postgres. Da jeg aldrig havde gjort det før, syntes jeg, at teknikken var ret smart. Grundlæggende opretter han en brugerdefineret partition til vinduesfunktionen ved at bruge en case-sætning inde i en indlejret forespørgsel, der øger en sum, når værdien ikke er nul, og ellers lader den være i fred. Dette gør det muligt at afgrænse hver null sektion med det samme tal som den tidligere ikke-nul værdi. Her er forespørgslen:

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
 

Og resultaterne:

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. Analyse af ODBC-data i IBM SPSS

  2. Administration af høj tilgængelighed i PostgreSQL – del III:Patroni

  3. Undgå Database Vendor Lock-In til MySQL eller MariaDB

  4. Få ugens startdato og ugens slutdato fra ugenummer