DATE_SUB() और NOW() के साथ
MySQL में **पिछले 1 घंटे** में डाली गई पंक्तियाँ प्राप्त करने के लिए DATE_SUB(NOW(), INTERVAL 1 HOUR) का उपयोग करके कटऑफ समय गणना करें।
सिंटैक्स
SELECT * FROM yourTableName
WHERE yourDateTimeColumn >= DATE_SUB(NOW(), INTERVAL 1 HOUR);
नोट: मूल लेख में <= था जो गलत है (भविष्य की पंक्तियाँ देगा)। सही है >= (कटऑफ के बाद की पंक्तियाँ)।
व्यावहारिक उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE LastHourRecords (
-> Id INT,
-> Name VARCHAR(100),
-> Login DATETIME
-> );
Query OK, 0 rows affected (0.67 sec)
2. डेटा डालें (विभिन्न समय)
mysql> INSERT INTO LastHourRecords VALUES(1, 'John', '2018-12-19 10:00:00');
mysql> INSERT INTO LastHourRecords VALUES(2, 'Carol', '2018-12-19 10:10:00');
mysql> INSERT INTO LastHourRecords VALUES(3, 'Sam', '2018-12-19 10:05:00');
mysql> INSERT INTO LastHourRecords VALUES(4, 'Mike', '2018-12-18 12:10:00'); -- 1 दिन पुराना
3. सभी डेटा
mysql> SELECT * FROM LastHourRecords;
+------+-------+---------------------+
| Id | Name | Login |
+------+-------+---------------------+
| 1 | John | 2018-12-19 10:00:00 |
| 2 | Carol | 2018-12-19 10:10:00 |
| 3 | Sam | 2018-12-19 10:05:00 |
| 4 | Mike | 2018-12-18 12:10:00 |
+------+-------+---------------------+
4 rows in set (0.00 sec)
4. पिछले 1 घंटे की पंक्तियाँ (मान लें NOW = '2018-12-19 10:15:00')
mysql> SELECT * FROM LastHourRecords
-> WHERE Login >= DATE_SUB(NOW(), INTERVAL 1 HOUR);
+------+-------+---------------------+
| Id | Name | Login |
+------+-------+---------------------+
| 1 | John | 2018-12-19 10:00:00 |
| 2 | Carol | 2018-12-19 10:10:00 |
| 3 | Sam | 2018-12-19 10:05:00 |
+------+-------+---------------------+
3 rows in set (0.00 sec)
माइक (1 दिन पुराना) बाहर रखा गया।
समय इकाई बदलें
INTERVAL 30 MINUTE -- पिछले 30 मिनट
INTERVAL 1 DAY -- पिछले 24 घंटे
INTERVAL 7 DAY -- पिछले सप्ताह
INTERVAL 1 MONTH -- पिछले महीने
प्रदर्शन अनुकूलन
Loginकॉलम पर **इंडेक्स** बनाएंDATE_SUB(NOW(), ...)क्वेरी में एक बार गणना होता है (सर्गेबल)WHERE Login >= '2018-12-19 09:15:00'(स्थिर मान) और तेज
सापेक्ष समय एंकर
NOW() क्वेरी निष्पादन समय है। बैच प्रोसेसिंग के लिए निश्चित एंकर उपयोग करें:
WHERE Login >= '2018-12-19 09:15:00' -- निश्चित समय