2012-10-10 8 views
5

के आधार पर डेटा के साथ चयन करने के लिए मैं एसक्यूएल में एक टेबल है, टेबल इस तरह है:एसक्यूएल उपयोगकर्ता का अनोखा सूची, टाइमस्टैम्प

+-------------+---------------+-------------------------+ 
| quotes_user | email_address | ________Sent_at________ | 
+-------------+---------------+-------------------------+ 
| user1  | email1  | 2012-10-09 12:23:53.253 | 
| user1  | email2  | 2012-10-09 12:24:53.253 | 
| user2  | email3  | 2012-10-09 13:20:53.253 | 
| user2  | email4  | 2012-10-09 11:23:53.253 | 
| user3  | email5  | 2012-10-08 10:29:53.253 | 
| user3  | email6  | 2012-10-08 14:23:53.253 | 
+-------------+---------------+-------------------------+ 

मैं परिणाम दिखाना चाहते हैं

+-------------+---------------+-------------------------+ 
| quotes_user | email_address | ________Sent_at________ | 
+-------------+---------------+-------------------------+ 
| user1  | email2  | 2012-10-09 12:24:53.253 | 
| user2  | email3  | 2012-10-09 13:20:53.253 | 
| user3  | email6  | 2012-10-08 14:23:53.253 | 
+-------------+---------------+-------------------------+ 

यानी मैं अद्वितीय उपयोगकर्ताओं की सूची चुनना चाहता हूं, और उनके साथ जुड़े नवीनतम ईमेल पते का चयन करना चाहता हूं।

समस्या की व्याख्या करने का एक और तरीका यह होगा कि मैं एक ऐसा क्षेत्र चुनना चाहता हूं जो खंड द्वारा किसी भी समग्र कार्य या क्रम में शामिल नहीं है। मैंने बिना किसी उपयोग के अलग-अलग और आदेश, समूह द्वारा इत्यादि के बहुत से क्रमपरिवर्तनों के साथ कई बयानों की कोशिश की है।

मैं कई बयानों से बचने की कोशिश कर रहा हूं।

कृपया मुझे इसके साथ मदद करें।

उत्तर

1

इस प्रयास करें:

SELECT t2.quotes_user, t2.email_address, t2.Sent_at AS '________Sent_at________' 
FROM 
(
    SELECT quotes_user, MAX(Sent_at) AS MaxDate 
    FROM Table 
    GROUP BY quotes_user 
) t1 
INNER JOIN Table t2 ON t1.quotes_user = t2.quotes_user 
        AND t1.Sent_at = t2.MaxDate 
+1

एक आकर्षण की तरह काम करता है। हालांकि मुझे नहीं पता कि जॉइन भाग कैसे काम करता है, क्या आप मुझे एक अच्छे संसाधन के लिए मार्गदर्शन कर सकते हैं? –

+1

@SunnyRGupta - यहां कुछ संसाधन दिए गए हैं: [विकिपीडिया - एसक्यूएल जुड़ता है] (http://en.wikipedia.org/wiki/Join_%28SQL%29), [कोडिंग डरावनी एसक्यूएल में एक विज़ुअल स्पष्टीकरण जुड़ता है -] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html), [कोडप्रोजेक्ट - एसक्यूएल के दृश्य प्रतिनिधित्व में शामिल हों] (http://www.codeproject.com/Articles/ 33,052/दृश्य-प्रतिनिधित्व के- एसक्यूएल-में शामिल)। और भी, मैं अत्यधिक अनुशंसा करता हूं [एसक्यूएल क्वेरीज़ फॉर मेर मॉर्टल्स] (http://rads.stackoverflow.com/amzn/click/0201433362) एसक्यूएल क्वेरीिंग की मूल बातें के लिए। –

+1

बहुत बहुत धन्यवाद, अंतिम लिंक अत्यंत मूल्यवान है: डी –

7

प्रश्न के पीछे विचार प्रत्येक के लिए प्रत्येक सबक्वायरी के अंदर अपने अधिकतम Sent_AT प्राप्त करना है और उसे मूल तालिका में वापस शामिल करना है।

SELECT a.* 
FROM tableName a INNER JOIN 
     (
      SELECT quotes_user, MAX(Sent_AT) maxSENT 
      FROM tableName 
      Group By quotes_user 
     ) b on a.quotes_user = b.quotes_user AND 
       a.Sent_AT = b.maxSent 

SQLFiddle Demo

+0

कोई समस्या? आप और जानना चाहते हैं? –

0
select quotes_user, email_address, sent_at 
from table_name t1 inner join 
    (select quote_user, max(sent_at) as sent 
    from table_name group by quotes_uaser) t2 
on t1.quotes_user = t2.quotes_user and t1.sent_at = t2.sent 
+1

उसी तरह का जवाब @Mahmoud द्वारा। कृपया डुप्लिकेट उत्तरों से बचें। –

0
select quote_user, email_adress, max(___sent_at___) from users group by quote_user 

भेजा पिछले मेल के साथ सबसे बड़ी sent_at correponds जाना चाहिए।

+1

कोई त्रुटि देता है: कॉलम 'email_adress' चयनित सूची में अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज में निहित नहीं है। –

+0

क्षमा करें, 'समूह द्वारा quote_user, email_adress' के लिए क्लॉज द्वारा समूह को बदलना चाहिए। –

+1

काम करता है, लेकिन वांछित आउटपुट नहीं देता है। असल में यह पहला कोड था जिसने मैंने कोशिश की थी। काम नहीं किया, इसलिए कुछ और प्रयासों के बाद यहां पोस्ट किया गया। –

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