sql >> Databasteknik >  >> RDS >> Mysql

Välj närmaste numeriska värde med MySQL-fråga

Ett alternativ skulle vara något i stil med:

select   the_value,
         abs(the_value - 14) as distance_from_test
from     the_table
order by distance_from_test
limit 1

För att välja en slumpmässig post kan du lägga till , rand() till order by klausul. Nackdelen med denna metod är att du inte får någon nytta av index eftersom du måste sortera på det härledda värdet distance_from_test .

Om du har ett index på the_value och du lättar på ditt krav på att resultatet ska vara slumpmässigt vid oavgjort, kan du utföra ett par frågor med begränsat intervall för att välja det första värdet omedelbart ovanför testvärdet och det första värdet omedelbart under testvärdet och välja det som är närmast till testvärdet:

(
select   the_value
from     the_table
where    the_value >= 14
order by the_value asc
limit 1
)
union
(
select   the_value
from     the_table
where    the_value < 14
order by the_value desc
limit 1
)
order by abs(the_value - 14)
limit 1


  1. Hur kan jag skapa en användare i SQL Server Express-databas som jag har lagt till i mitt projekt?

  2. Vilken hierarkisk modell ska jag använda? Närliggande, kapslad eller uppräknad?

  3. MySQL-installation:FEL:Det gick inte att bygga ädelstensinbyggt tillägg

  4. T-SQL delad sträng