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

MySQL में DATE_SUB और BETWEEN से अंतिम N दिन पहले के रिकॉर्ड ढूंढें

MySQL में DATE_SUB() और BETWEEN का उपयोग करके किसी दिनांक कॉलम में अंतिम N दिनों के रिकॉर्ड क्वेरी कर सकते हैं।

उदाहरण: पिछले 3 दिन पहले के पोस्ट (आधार दिनांक: 2019-10-20)

1. टेबल बनाएं

mysql> CREATE TABLE DemoTable1582 (PostedDate DATETIME);

2. डेटा डालें

mysql> INSERT INTO DemoTable1582 VALUES('2019-01-21 12:34:40');
mysql> INSERT INTO DemoTable1582 VALUES('2019-10-15 11:00:00');
mysql> INSERT INTO DemoTable1582 VALUES('2019-10-25 01:10:00');

3. क्वेरी (मूल लेख का दृष्टिकोण)

mysql> SELECT * FROM DemoTable1582
    -> WHERE PostedDate BETWEEN DATE_SUB(PostedDate, INTERVAL 3 DAY) AND NOW();

4. परिणाम

+---------------------+
| PostedDate          |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
+---------------------+

⚠️ मूल क्वेरी में तार्किक समस्या

DATE_SUB(PostedDate, INTERVAL 3 DAY) प्रत्येक पंक्ति के अपने PostedDate से 3 दिन घटाता है, न कि एक निश्चित संदर्भ दिनांक से। यह "प्रत्येक पोस्ट के 3 दिन पहले से अब तक" ढूंढता है, जो लगभग सभी पिछली पंक्तियों से मेल खाता है।

सही दृष्टिकोण: निश्चित संदर्भ दिनांक

वर्तमान समय से पिछले 3 दिन

SELECT * FROM DemoTable1582
WHERE PostedDate BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW();

विशिष्ट दिनांक से पिछले 3 दिन

SELECT * FROM DemoTable1582
WHERE PostedDate BETWEEN DATE_SUB('2019-10-20', INTERVAL 3 DAY) AND '2019-10-20';

केवल पिछले 3 दिन (ऊपरी सीमा नहीं)

SELECT * FROM DemoTable1582
WHERE PostedDate >= DATE_SUB(NOW(), INTERVAL 3 DAY);

BETWEEN बनाम >= तुलना

ऑपरेटरशामिलउपयोग
BETWEEN A AND BA और B दोनोंसीमा क्वेरी
>= AA से शुरू"A के बाद" सरल

इंडेक्स उपयोग के लिए सर्वोत्तम अभ्यास

-- अच्छा: कॉलम पर सीधा फ़ंक्शन नहीं
WHERE PostedDate >= DATE_SUB(NOW(), INTERVAL 3 DAY)

-- खराब: कॉलम पर फ़ंक्शन (इंडेक्स उपयोग नहीं)
WHERE DATE(PostedDate) >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
  1. - MySQL में पंक्तियों के मान जोड़कर परिणाम सॉर्ट करना

    GROUP BY और ORDER BY से समूहवार योग और क्रम SUM() और GROUP BY से प्रत्येक समूह का योग निकालें, फिर ORDER BY से परिणाम क्रमबद्ध करें। तालिका और डेटा (Chris, 45), (David, 98), (Bob, 58); क्वेरी: नामवार कुल अंक, अवरोही क्रम ORDER BY TotalSum DESC; परिणाम +-------------+----------+ | StudentName

  1. - MySQL में ORDER BY DESC LIMIT से अंतिम 30 पंक्तियां प्राप्त करें

    MySQL में अंतिम N पंक्तियां प्राप्त करने के लिए ORDER BY ... DESC LIMIT N का उपयोग करें, फिर आवश्यकतानुसार पुनः क्रमबद्ध करें। सिंटैक्स SELECT * FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT 30; उदाहरण: अंतिम 30 पंक्तियां (ID अवरोही क्रम) 1. टेबल बनाएं (ऑटो-इन्क्रीमेंट ID) ); 2. 37 पंक्तियां डालें

  1. - MySQL में सबक्वेरी और ORDER BY DESC LIMIT से अंतिम 3 पंक्तियां आरोही क्रम में प्राप्त करें

    टेबल की अंतिम N पंक्तियों को आरोही क्रम में प्राप्त करने के लिए: पहले अवरोही क्रम में N पंक्तियां लें, फिर बाहरी क्वेरी में आरोही क्रम में सॉर्ट करें। सिंटैक्स SELECT * FROM ( SELECT * FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT 3 ) AS alias ORDER BY कॉलम_नाम ASC; उदाहरण 1. टेबल बनाएं