SQL का उपयोग करके पिछले 24 घंटों से रिकॉर्ड का चयन कैसे करें?


185

मैं एक ऐसे whereखंड की तलाश कर रहा हूं जिसका उपयोग पिछले 24 घंटों के रिकॉर्ड को पुनः प्राप्त करने के लिए किया जा सके?


1
क्या आपके पास इन रिकॉर्ड्स पर टाइमस्टैम्प फ़ील्ड है?
शॉन स्टीवर्ड

जवाबों:


101
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

6
यदि अभिलेखों को संग्रहीत किया जाता है DATETIME, तो यह पिछली तिथि से सभी अभिलेखों का चयन करेगा, समय भाग की उपेक्षा करेगा। पर चला गया 23:59:59, क्वेरी पिछले 48घंटों के लिए सभी रिकॉर्ड लौटाएगी, नहीं 24
क्वासनोई

18
यदि आप किसी डेटाटाइम क्षेत्र से अंतिम 24 घंटों का चयन करना चाहते हैं, तो 'अब ()' के साथ 'क्यूरेट ()' को प्रतिस्थापित करें। इसमें समय भी शामिल है।
हेंटज

563

इन MySQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - INTERVAL 1 DAY

इन SQL Server:

SELECT  *
FROM    mytable
WHERE   record_date >= DATEADD(day, -1, GETDATE())

इन Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

इन PostgreSQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - '1 day'::INTERVAL

इन Redshift:

SELECT  *
FROM    mytable
WHERE   record_date >= GETDATE() - '1 day'::INTERVAL

इन SQLite:

SELECT  *
FROM    mytable
WHERE   record_date >= datetime('now','-1 day')

इन MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)

3
मैं mysql के लिए क्वेरी की कोशिश करता हूं, लेकिन यदि इसका 2AM, उदाहरण के लिए, मुझे 00 - 02 बजे से रिकॉर्ड मिलता है। केवल 24 के बजाय दो घंटे। कोई विचार?
मानस

मुझे यहां दिए गए समाधान बहुत पसंद हैं, बस मैंने जो कुछ MySQL में नोट किया है वह है गिलायूम फ्लैंड्रे समाधान का प्रदर्शन तेज था।
oneworld

1
अमेज़ॅन रेडशिफ्ट में, मुझे मिलता है function getdate() does not exist। के साथ बदल दिया current_dateऔर यह ठीक काम किया।
फ्लोटिंगरॉक

1
यह उत्तर मुझे इच्छा है कि एक "स्टार" बटन थे जैसा कि मैं इसे बुकमार्क करना चाहता हूं।
ब्रायन रिस्क

1
@ मानस MySQL में, ऐसा लगता है कि CURDATE()एक समय भाग के साथ एक तारीख वापस नहीं करता है, इसलिए यह जाता है 00। मैंने NOW()इसके बजाय का उपयोग करके इसे ठीक किया CURDATE()
4castle

21

माई एसक्यूएल :

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)

INTERVAL YEAR, MONTH, DAY, HOUR, MINUTE, SECOND में हो सकता है

उदाहरण के लिए, अंतिम 10 मिनटों में

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)

3
यह वह उत्तर है जो विशिष्ट प्रश्न का सबसे अच्छा उत्तर देता है: पूर्ववर्ती 24 घंटे (वर्तमान समय से) को वापस कैसे लौटाएं, जैसा कि पिछले 24 के विपरीत है (जो पिछले दिन के सभी परिणामों का सुझाव देता है)। इसने मेरी आवश्यकताओं का उत्तर दिया, इससे मेरा उत्थान होता है। EDIT: टेबल_name.the_date कॉलम का उल्लेख करने लायक इसका टाइमस्टैम्प होना चाहिए।
एंथनी क्रेगन

8

कौन सा SQL निर्दिष्ट नहीं किया गया था, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())

यदि आप 2008 बढ़ी हुई सटीकता दिनांक प्रकारों पर हैं, तो इसके बजाय नए sysdatetime () फ़ंक्शन का उपयोग करें, समान रूप से यूटीसी काल का उपयोग करके आंतरिक रूप से यूटीसी कॉल पर स्वैप करें।


7

पोस्टग्रेज में, अपने क्षेत्र के प्रकार को एक टाइमस्टैम्प मानते हैं:

तालिका से चुनें * जहाँ date_field> (अब () - अंतराल '24 घंटे ');


4

अगर माना जाने वाला टाइमस्टैम्प एक यूनिक्स टाइमस्टैम्प है, तो आपको सबसे पहले यूनिक्स टाइमस्टैम्प (जैसे 1462567865) को mysql टाइमस्टैम्प या डेटा में बदलना होगा।

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

यह मानते हुए कि इंजन का उपयोग किया जा रहा है MySQL के रूप में FROM_UNIXTIME () एक MySQL फ़ंक्शन है। SQL सर्वर उपयोग के लिए: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) यदि आपको SQL Server 2016 में मिलीसेकंड सटीकता की आवश्यकता है और बाद में उपयोग करें: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

नमस्कार, अब मैं मूल पोस्ट से बहुत समय व्यतीत करता हूं लेकिन मुझे एक समान समस्या है और मैं साझा करना चाहता हूं।

मुझे इस प्रारूप के साथ एक डेटाइम फ़ील्ड मिला YYYY-MM-DD hh: mm: ss, और मैं एक पूरे दिन का उपयोग करना चाहता हूं, इसलिए यहां मेरा समाधान है।

फंक्शन DATE (), MySQL में: डेट या डेटाइम एक्सप्रेशन का पार्ट पार्ट निकालें।

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'

इस के साथ मैं इस दिन में सभी पंक्ति रजिस्टर मिलता है।

मुझे उम्मीद है कि इसकी मदद किसी को भी होगी।


यह केवल वही है जिसने mySQL पर मेरे लिए काम किया है। किसी कारण के लिए जब मैंने कोशिश की * अपने से कहाँ का चयन करें MyDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 घंटे); मुझे अभी भी 2018-06-14 से रिकॉर्ड मिल रहा था।
jDub9


1

SQL सर्वर में (पिछले 24 घंटों के लिए):

SELECT  *
FROM    mytable
WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()

2
जब आप पहले से ही पिछले 24 घंटों के लिए देख रहे हों, तो आपको "और order_date <= GETDATE ()" क्यों जोड़ना होगा? यह वास्तव में कोई मतलब नहीं है कि जब आप "GETDATE" पहले से ही पहले उल्लेखित है, तो उस खंड में वह हिस्सा कहाँ है। आप इसे "ऑर्डर_डेट> = डेटआड (डे, -1, गेटडेट ())" से बेहतर बनाते हैं!
केएमएक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.