sql >> Databáze >  >> RDS >> Mysql

Vyberte nejbližší číselnou hodnotu pomocí dotazu MySQL

Jednou z možností by bylo něco ve smyslu:

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

Chcete-li vybrat náhodný záznam, můžete přidat , rand() do order by doložka. Nevýhodou této metody je, že z indexů nezískáte žádnou výhodu, protože musíte třídit podle odvozené hodnoty distance_from_test .

Pokud máte index na the_value a uvolníte svůj požadavek na to, aby byl výsledek v případě remíz náhodný, můžete provést pár dotazů s omezeným rozsahem a vybrat první hodnotu bezprostředně nad testovací hodnotou a první hodnotu těsně pod testovací hodnotou a vybrat tu, která je nejbližší na testovací hodnotu:

(
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. 5 Microsoft Access Tipy a triky

  2. Jak přidám kontrolní omezení při migraci Rails?

  3. Načtení typu tabulky Oracle z uložené procedury pomocí JDBC

  4. Výpočet kumulativního součtu v PostgreSQL