Comment find la première valeur la plus proche de haut en bas dans SQL?

J'ai une table comme celle-ci:

entrez la description de l'image ici

Quand je mets id = 4, les résultats dont j'ai besoin sont:

entrez la description de l'image ici

Notez que j'ai sélectionné l' ID=4 et les deux valeurs les plus proches des deux côtés.

Comment écrire du code sql pour le faire?

Vous pouvez utiliser la fonction LEAD() , qui sélectionne la prochaine valeur par un ordre spécifique, comme ceci:

Notez que LEAD n'a été introduit que dans SQL Server 2012+.

 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) 

Vous pouvez replace 4 avec votre ID désiré ou avec un paramètre.

EDIT: Une petite explication – La fonction LEAD fournit un moyen d'accéder à la ligne suivante, sans l'utilisation d'un SELF JOIN ou une sub query , il ordonne les résultats par l'ordre que vous avez fourni dans la clause OVER() , et select la valeur les parenthèses – LEAD(value) qui appartiennent à l'logging au-dessus de l'logging en cours en cours de traitement. Ainsi, cette requête sélectionne chaque ID , et l' ID qui appartient à la valeur la plus proche de haut en bas, puis vérifiez si l'un d'entre eux est votre ID désiré.

 declare @id int = 4 select sn.* from table sn inner join ( select top 2 sn_prev.* from table sn_prev where id <= @id order by id desc ) sp on sp.id= sn.id union select sn.* from table sn inner join ( select top 1 sn_prev.* from table sn_prev where id > @id order by id ) sp on sp.id = sn.id 

vous pouvez utiliser la fonction MIN () et MAX () en SQL.