können Sie verwenden LEAD()
Funktion, die den nächsten Wert von einer bestimmten Reihenfolge, wie dies wählt:
Hinweis dass LEAD
nur für SQL-Server 2012+ vorgestellt wurde.
SELECT s.id,s.name,s.number
FROM (
SELECT t.*
LEAD(t.id,1) OVER(ORDER BY t.Number DESC) as Next_val,
LEAD(t.id,1) OVER(ORDER BY t.Number) as Last_val
FROM YourTable t) s
WHERE 4 IN(s.id,next_Val,s.last_val)
Sie können ersetzen 4
mit Ihrem ID
oder mit einem Parameter gewünscht.
EDIT: Eine kleine Erklärung - LEAD
-Funktion ermöglicht es, die nächste Zeile zuzugreifen, ohne die Verwendung eines SELF JOIN
oder sub query
, es die Ergebnisse durch die Reihenfolge anordnet Sie innerhalb der OVER()
Klausel vorgesehen, und wählen Sie die Wert innerhalb der Klammern - LEAD(value)
, die zu dem Datensatz oberhalb des aktuellen Datensatzes gehören, der verarbeitet wird. Also, diese Abfrage wählt jede ID
, und die ID
, die zu den nächsten Wert nach oben und unten gehört, und dann prüfen, ob einer von ihnen ist Ihre gewünschte ID
.
Haben Ihre IDs IMMER laufende Nummern, keine Lücken? – FDavidov
Ich habe Lücken. – shahroz