sql >> Database >  >> RDS >> Mysql

Selecteer de dichtstbijzijnde numerieke waarde met MySQL-query

Een optie zou iets zijn in de trant van:

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

Om een ​​willekeurig record te selecteren, kunt u , rand() . toevoegen naar de order by clausule. Het nadeel van deze methode is dat je geen voordeel haalt uit indices omdat je moet sorteren op de afgeleide waarde distance_from_test .

Als je een index hebt op the_value en je versoepelt je eis dat het resultaat willekeurig is in het geval van gelijkspel, je kunt een paar zoekopdrachten met een beperkt bereik uitvoeren om de eerste waarde direct boven de testwaarde en de eerste waarde direct onder de testwaarde te selecteren en de dichtstbijzijnde te kiezen naar de testwaarde:

(
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. Geaggregeerde functie in MySQL - lijst (zoals LISTAGG in Oracle)

  2. Hoe items uit de sqlite-database te verwijderen met de SQLiteOpenHelper-klasse

  3. Django datetime-veld - converteer naar tijdzone in weergave

  4. Conversie van MySQL-gegevenstype van varchar naar float