Wie schreibe ich einen Join mit diesen ungewöhnlichen Übereinstimmungskriterien?

Ich möchte eine Tabelle "links verbinden", damit ein Wert nicht nur mit einer übereinstimmenden Zeile, sondern auch mit allen nachfolgenden nicht übereinstimmenden Zeilen bis zur nächsten übereinstimmenden Zeile verbunden wird. Um es anders auszudrücken, ich möchte Nullen mit dem vorherigen Wert ungleich Null ausfüllen.

Beispieldaten und gewünschtes Ergebnis:

Tabellex:

 id 
----
  1
  2
  3
  4
  5

Tabelley:

 id | val 
----+-----
  1 | a
  4 | b

Ergebnis vonselect x.id, y.val from x left join y on x.id=y.id order by x.id;:

 id | val 
----+-----
  1 | a
  2 | 
  3 | 
  4 | b
  5 | 

Erwünschtes Ergebnis:

 id | val 
----+-----
  1 | a
  2 | a
  3 | a
  4 | b
  5 | b

Antworten auf die Frage(7)

Ihre Antwort auf die Frage