एक विकल्प कुछ इस तरह होगा:
select the_value,
abs(the_value - 14) as distance_from_test
from the_table
order by distance_from_test
limit 1
एक यादृच्छिक रिकॉर्ड का चयन करने के लिए, आप , rand()
add जोड़ सकते हैं 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