Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में सबक्वेरी, ORDER BY DESC LIMIT और RAND() का उपयोग करके नवीनतम 20 पंक्तियों में से 5 रैंडम पंक्तियाँ चुनना

MySQL में सबक्वेरी का उपयोग करके पहले नवीनतम N पंक्तियाँ चुनें, फिर उनमें से रैंडम नमूना लें।

उदाहरण: टेबल बनाना और 29 रिकॉर्ड डालना

mysql> CREATE TABLE DemoTable (
    -> ShippingDate DATETIME
    -> );
Query OK, 0 rows affected (0.51 sec)

जनवरी से मई 2019 तक की विभिन्न दिनांक डालें (29 पंक्तियाँ)।

सभी रिकॉर्ड देखना

mysql> SELECT * FROM DemoTable;

आउटपुट (29 पंक्तियाँ)

+---------------------+
| ShippingDate        |
+---------------------+
| 2019-01-01 00:00:00 |
| 2019-01-03 00:00:00 |
| ...                 |
| 2019-05-18 00:00:00 |
+---------------------+
29 rows in set (0.00 sec)

नवीनतम 20 पंक्तियों में से 5 रैंडम पंक्तियाँ चुनना

mysql> SELECT tbl1.* FROM (
    ->     SELECT * FROM DemoTable ORDER BY ShippingDate DESC LIMIT 20
    -> ) AS tbl1
    -> ORDER BY RAND() LIMIT 5;

आउटपुट (उदाहरण - हर बार अलग)

+---------------------+
| ShippingDate        |
+---------------------+
| 2019-03-14 00:00:00 |
| 2019-05-13 00:00:00 |
| 2019-03-25 00:00:00 |
| 2019-05-16 00:00:00 |
| 2019-03-10 00:00:00 |
+---------------------+
5 rows in set (0.04 sec)

चरण-दर-चरण:

  1. आंतरिक क्वेरी: ORDER BY ShippingDate DESC LIMIT 20 - नवीनतम 20 पंक्तियाँ चुनता है
  2. बाहरी क्वेरी: ORDER BY RAND() LIMIT 5 - उन 20 में से 5 रैंडम चुनता है

प्रदर्शन विचार:

  • आंतरिक LIMIT इंडेक्स स्कैन को सीमित करता है (यदि ShippingDate पर इंडेक्स है)
  • बाहरी RAND() केवल 20 पंक्तियों पर काम करता है (तेज़)
  • बड़ी टेबल के लिए: WHERE ShippingDate >= (SELECT ShippingDate FROM DemoTable ORDER BY ShippingDate DESC LIMIT 1 OFFSET 19) जैसी शर्त का उपयोग करें

MySQL 8.0+ विकल्प: CTE (WITH क्लॉज) का उपयोग करके पठनीयता सुधारें।

  1. - MySQL में डेट रेंज से दिन कैसे जनरेट करें

    यह निम्न क्वेरी की मदद से किया जा सकता है जो ADDDATE() फंक्शन का उपयोग करती है और हम 2016-12-15 और 2016-12-31 के बीच के दिन जनरेट कर रहे हैं: WHERE gen_date BETWEEN 2016-12-15 AND 2016-12-31; +------------+ | gen_date | +------------+ | 2016-12-15 | | 2016-12-16 | | 2016-12-17 | | 2016-12-18 | |

  1. MySQL से अंतिम 10 रो कैसे चुनें? MySQL से अंतिम 10 रो कैसे चुनें?

    MySQL से अंतिम 10 रो चुनने के लिए, हम SELECT स्टेटमेंट और LIMIT कॉन्सेप्ट के साथ सबक्वेरी का उपयोग कर सकते हैं। निम्न एक उदाहरण है। टेबल बनाना। mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.75 sec) टेबल में रिकॉर

  1. - MySQL में सबक्वेरी और ORDER BY RAND से अंतिम 50 प्रविष्टियों में से 5 रैंडम पंक्तियाँ चुनें

    बड़ी टेबल से हाल की N पंक्तियों में से रैंडम नमूना लेने के लिए: पहले सबक्वेरी में ORDER BY id DESC LIMIT N से हाल की पंक्तियाँ लें, फिर बाहरी क्वेरी में ORDER BY RAND() LIMIT M लागू करें। टेबल बनाएं (केवल ID) mysql> CREATE TABLE DemoTable1853 ( UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY