2017-11-16 2 views
0

Ich habe einen Tisch bekommen:oder nächste Zeile in SQL

id value1 value2 
1 1  6 
2 8  10 
3 14  20 

Dann habe ich eine Zahl, lassen Sie sich x=7 sagen.

Meine Abfrage sollte ID herausfinden, für die x zwischen Wert1 und Wert2 fällt. Wenn x nicht in einen Bereich fällt, verwenden Sie die nächste ID. In meinem Fall x=7 würde ich id=2 bekommen.

Ich denke, es könnte irgendwie mit Windowing-Funktionen in PostgreSQL getan werden, aber vielleicht gibt es eine einfachere Lösung?

+0

aber was x ist, gibt es kein solches Feld in der Tabelle. – MarcinSzaleniec

+0

Es könnte etwas in WHERE Zustand sein. SELECT * FROM Tabelle WO x = 7 UND x ZWISCHEN Wert1 UND Wert2; etc... –

Antwort

2
select * 
from t 
where 7 <= v2 
order by v1 
limit 1 
0

Ich gehe davon aus Sie wollen tatsächlich eine Liste der möglichen Ergebnisse (wenn x Matches mehr als eine Zeile, wollen Sie sie alle, sonst nur die letzte). Angesichts dessen dachte ich an die folgende Lösung:

SELECT CASE 
     WHEN 
      (
      SELECT COUNT(*) 
      FROM  table 
      WHERE  x > value1 
        AND x < value2 
      ) > 0 
     THEN 
      (
      SELECT id 
      FROM  table 
      WHERE  x > value1 
        AND x < value2 
      ) 
     ELSE 
      (
      SELECT MAX(id) 
      FROM  table 
      ) 
     END AS my_ids 
Verwandte Themen