Anmelden

View Full Version : SQL kleinster wert der größer oder gleich ist



Marc_w
26-10-22, 07:41
Hallo,

gibt es eine Lösung ohne Subselect für folgendes Problem:

ich habe in einer Tabelle den Wert 14

in der 2. Tabelle gibt es folgende Werte:



Key
Wert

1
A


3
B


7
C


12
D


13
E


17
F


22
G


28
H



Der Select soll mir nun die Verknüpfung von 14 mit F machen. 17 ist der kleinste Wert aller Keys, die größer oder gleich 14 sind.

Grüße und vielen Dank für eure Hilfe

Marc

Andreas_Prouza
26-10-22, 08:30
Wahrscheinlich nicht das was du erwartet hast ... mit einer WITH hab ich die Verknüpfung aufgebaut und dadurch kann man mit einem einfachen JOIN die Tabellen verknüpfen:




WITH x AS
(
SELECT t1.key, min(t2.key) min_t2_key FROM t1
LEFT JOIN t2
ON t2.key >= t1.key
GROUP BY t1.key
)
SELECT * FROM t1
LEFT JOIN x
ON t1.key = x.key
LEFT JOIN t2
ON t2.key = x.min_t2_key



Wenn du im SELECT auf den Wert 14 einschränkst geht auch folgendes:



SELECT * FROM t1
LEFT JOIN t2
ON t1.key <= t2.key
WHERE t1.key = 14
FETCH FIRST ROW only


Eine weitere Variante ist es via OLAP zu machen:



SELECT DISTINCT t1.key, FIRST_value(t2.wert) OVER (partition by t1.key)
FROM t1
LEFT JOIN t2
ON t1.key <= t2.key


lg Andreas

Fuerchau
26-10-22, 08:35
Nun, da für gibts inzwischen die "lateral table"

Select *
from ATable A
left join lateral table (
select * from BTable B
where b.key < a.key
order by b.key desc
limit 1
)

Marc_w
26-10-22, 09:07
Vielen Dank für die schnellen Lösungsvorschläge. Jetzt habe ich die Qual der Wahl.

Marc