2011-09-19 25 views
7

के बाद कहां लागू करें मेरे पास एक थ्रेड का हिस्सा है, इसलिए उनके पास एक थ्रेड आईडी है, इसलिए उनके पास एक थ्रेड आईडी है, प्रत्येक आइटम में एक तिथि भी है (यूनिक्स टाइमस्टैम्प)।ग्रुप बी

+-----------------------------+ 
| id | date | thread_id | 
+-----+---------+-------------+ 
| 1 | 1111 |  4  | 
| 2 | 1333 |  4  | 
| 3 | 1444 |  5  | 
| 4 | 1666 |  5  | 
+-----------------------------+ 

मुझे क्या करना चाहते हैं का चयन करें धागा आईडी जहां सभी एक ही धागा आईडी साझा आइटम पारित कर दिया तारीख से छोटे हैं है: तो मेरी मेज (यूनिक्स सरलीकृत टाइम स्टांप) की तरह कुछ लग रहा है। तो अगर मैं थ्रेड आईडी चाहता था जहां सभी आइटम 1555 से अधिक पुराने हैं (दिनांक < 1555), तो मुझे केवल थ्रेड आईडी 4 लौटाए जाने की उम्मीद है, 5 नहीं, भले ही इसे 1555 से छोटी तारीख के साथ कोई आइटम मिल जाए। तो यही वह है जो मैं की कोशिश की:

SELECT * FROM table WHERE date < 1555 GROUP BY thread_id ORDER BY date DESC 

क्या मुझे लगता है कि क्वेरी से कोई लेना देना कोशिश कर रहा हूँ समूह उच्चतम दिनांक मान के साथ और वहाँ से आइटम जहां तिथि 1555 से भी कम समय लेकिन वह यह है कि मिल आइटम चारों ओर धागा आईडी के आधार पर सभी आइटम है काम नहीं करता है, यह अभी भी थ्रेड आईडी 5 लौटाएगा क्योंकि इसे 1555 से पुराना आइटम मिला है।

तो संक्षेप में, मैं केवल थ्रेड आईडी का चयन कैसे करूं जहां सभी आइटम किसी निश्चित तिथि से बड़े होते हैं?

आपके समय के लिए धन्यवाद!

उत्तर

15
SELECT thread_id FROM table GROUP BY thread_id HAVING MAX(date) < 1555 
+0

यह काम करने के लिए लगता है, इतना आसान था! बहुत बहुत धन्यवाद। – flicker

1

एक हैविंग क्लॉज का उपयोग करें। यह आपको योग, मैक्स की तरह समुच्चय पर फिल्टर करने के लिए ... यहाँ आप केवल उन धागा आईडी के जिसका नवीनतम प्रविष्टि 1555 से अधिक पुराना है का चयन करना चाहते अनुमति देता है ताकि आप लिखें:

SELECT * FROM table 
    GROUP BY thread_id 
    HAVING MAX(date) < 1555 
    ORDER BY date DESC 
+0

आपका WHERE क्लॉज HAVING क्लॉज को 1555 से आगे की तारीखों को देखने से रोकता है, इसलिए हैविंग स्थिति का संयोजन और ऑर्डर बी पहले 5 थ्रेड लेगा। WHERE खंड (इस बार) ड्रॉप करें। –

संबंधित मुद्दे