Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете най-близката числова стойност с MySQL заявка

Един вариант би бил нещо от рода на:

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

За да изберете произволен запис, можете да добавите , rand() към order by клауза. Недостатъкът на този метод е, че не получавате никаква полза от индексите, защото трябва да сортирате по извлечената стойност distance_from_test .

Ако имате индекс на the_value и облекчавате изискването си резултатът да е случаен в случай на равенства, можете да изпълните двойка заявки с ограничен диапазон, за да изберете първата стойност непосредствено над тестовата стойност и първата стойност непосредствено под стойността на теста и изберете коя от двете е най-близка до тестовата стойност:

(
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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортирайте CSV файл директно в MySQL

  2. CAST към DECIMAL в MySQL

  3. Настройване на Laravel на Mac php artisan мигриране грешка:Няма такъв файл или директория

  4. Заявка за намиране на таблици, променени през последния час

  5. Защо MySQL не поддържа точност от милисекунди/микросекунди?