ABS() और ORDER BY के साथ निकटतम मान खोजना
एक यूजर-डिफाइंड वेरिएबल मान के निकटतम रिकॉर्ड को खोजने के लिए ABS() फंक्शन और ORDER BY ... LIMIT 1 का उपयोग करें।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ProductAmount INT
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable (ProductAmount) VALUES (5000); mysql> INSERT INTO DemoTable (ProductAmount) VALUES (6000); mysql> INSERT INTO DemoTable (ProductAmount) VALUES (7000);
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+------------+---------------+ | CustomerId | ProductAmount | +------------+---------------+ | 1 | 5000 | | 2 | 6000 | | 3 | 7000 | +------------+---------------+
यूजर-डिफाइंड वेरिएबल 6990 सेट करें और निकटतम मान खोजें:
mysql> SET @value = 6990;
mysql> SELECT ProductAmount FROM DemoTable
ORDER BY ABS(ProductAmount - @value) LIMIT 1;
आउटपुट:
+---------------+ | ProductAmount | +---------------+ | 7000 | +---------------+
व्याख्या:
- SET @value = 6990: यूजर-डिफाइंड वेरिएबल में लक्ष्य मान सेट करता है
- ABS(ProductAmount - @value): प्रत्येक रिकॉर्ड के मान और लक्ष्य मान के बीच निरपेक्ष अंतर निकालता है:
- |5000 - 6990| = 1990
- |6000 - 6990| = 990
- |7000 - 6990| = 10
- ORDER BY ... ASC: सबसे छोटे अंतर को पहले लाता है (डिफॉल्ट ASC)
- LIMIT 1: केवल सबसे निकटतम मान लौटाता है (7000, अंतर 10)
उपयोग के मामले: निकटतम मूल्य खोज, निकटतम तारीख, निकटतम भौगोलिक स्थान (निर्देशांकों के साथ), फज़ी मैचिंग।
नोट: यदि दो मान समान दूरी पर हैं (जैसे 6980 और 7000, लक्ष्य 6990), तो जो पहले आता है वह लौटाया जाता है (ORDER BY में टाई-ब्रेकर नहीं है)।