sql >> Database teknologi >  >> RDS >> Mysql

Vælg den nærmeste numeriske værdi med MySQL-forespørgsel

En mulighed ville være noget i retning af:

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

For at vælge en tilfældig post kan du tilføje , rand() til order by klausul. Ulempen ved denne metode er, at du ikke får nogen fordel af indekser, fordi du skal sortere på den afledte værdi distance_from_test .

Hvis du har et indeks på the_value og du slækker på dit krav om, at resultatet skal være tilfældigt i tilfælde af ligheder, kan du udføre et par forespørgsler med begrænset rækkevidde for at vælge den første værdi umiddelbart over testværdien og den første værdi umiddelbart under testværdien og vælge den, der er tættest på til testværdien:

( 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. Sådan formateres dato og klokkeslæt i SQL Server

  2. Bruger du .aggregate() på en værdi introduceret ved hjælp af .extra(select={...}) i en Django-forespørgsel?

  3. kunne ikke åbne stream:Ingen sådan fil eller mappe i

  4. SQL-forespørgsel returnerer falsk i PHP