2011-05-31 15 views
29

मैं यह जानने का प्रयास कर रहा हूं कि एक MySQL क्वेरी कैसे लिखनी है जो तिथि के अनुसार निकटतम 3 घटनाओं को वापस कर देगी।एसक्यूएल क्वेरी निकटतम तारीख दिखाने के लिए?

यह मेरी मेज है:

EVENT_ID EVENT_NAME  EVENT_START_DATE(DATETIME) 
1   test   2011-06-01 23:00:00 
2   test2   2011-06-03 23:00:00 
3   test3   2011-07-01 23:00:00 
4   test4   2011-08-09 23:00:00 
5   test5   2011-06-02 23:00:00 
6   test6   2011-04-20 23:00:00 

तो क्वेरी परिणाम के रूप में वे सबसे करीब आज की तारीख की तुलना में होने के लिये कर रहे हैं ..

संपादित आईडी 1,2,5 के लिए किया जाना चाहिए : क्वेरी केवल भविष्य की घटनाओं को ढूंढनी चाहिए।

+1

उन तारीखों 2010 में हैं, इसलिए वास्तव में 4, 3 और 2 निकटतम अब :) मैं मान लिया गया है कि तुम 2011 – Mat

+0

@Mat होने के लिए वाह उन तारीखों का मतलब, पूरी तरह से है कि याद कर रहे हैं। क्षमा करें, 2011 –

उत्तर

52
SELECT event_id 
FROM Table 
ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) 
LIMIT 3 

ABS() मतलब यह है कि एक घटना 1 दिन पहले बस के रूप में भविष्य में एक घटना 1 दिन के रूप में करीब है। यदि आप केवल उन घटनाओं को चाहते हैं जो अभी तक नहीं हुए हैं, तो

SELECT event_id 
FROM Table 
WHERE EVENT_START_DATE > NOW() 
ORDER BY EVENT_START_DATE 
LIMIT 3 
+1

क्या यूनिक्स टाइमस्टैम्प के साथ 'DATEDIFF() 'काम करें? –

0
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3 
+0

पर तय किया गया है जो कि ईवेंट_आईडी 6 भी वापस करेगा, जो अतीत में होता है। –

+1

यह बेहतर होगा अगर यह था: तालिका EVENT_START_DATE> = CURRENT_TIMESTAMP EVENT_START_DATE LIMIT द्वारा ऑर्डर_आईडी चुनें 0 –

2
SELECT * 
    FROM table 
    WHERE EVENT_START_DATE >= NOW() 
ORDER BY EVENT_START_DATE 
    LIMIT 3 
0

मुझे लगता है कि यह वही है जो आप खोज रहे हैं। यह सभी एल्स प्रतिक्रियाओं के समान ही है।

SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3 
संबंधित मुद्दे