SQLite

2010-06-14 14 views
7

में डिस्टिंट खंड हाल ही में मैंने पाया कि SQLite DISTINCT ON() क्लॉज का समर्थन नहीं करता है जो postgresql-specific लगता है। उदाहरण के लिए, यदि मेरे पास t कॉलम a और b के साथ तालिका है। और मैं अलग-अलग b के साथ सभी आइटम चुनना चाहता हूं। क्या निम्न क्वेरी SQLite में ऐसा करने का एकमात्र और सही तरीका है?SQLite

select * from t where b in (select distinct b from t) 

नमूना डेटा:

a | b 
__|__ 
1 5 
2 5 
3 6 
4 6 

क्या मैं बदले में उम्मीद:

a | b 
__|__ 
1 5 
3 6 
+4

कि क्वेरी हमेशा टी से सभी पंक्तियों को वापस आ जाएगी , चूंकि टी में प्रत्येक बी का हिस्सा है (टी से अलग बी का चयन करें)। हो सकता है कि आप जो कुछ करने की कोशिश कर रहे हैं, उसे थोड़ा और स्पष्ट कर सकें, और कुछ नमूना डेटा और अपेक्षित परिणाम प्रदान करें? – dcp

+1

जब तक आप समझाएंगे कि '(1,5)' आपके अपेक्षित परिणाम सेट में क्यों है, जबकि '(2,5)' नहीं है (और यह वास्तव में क्यों है, और दूसरी तरफ नहीं), यह कठिन होगा जवाब देने के लिए। – Tomalak

+0

कोई भी कंस्ट्रेट करेगा। न्यूनतम, अधिकतम आदि मान लीजिए कि वास्तविक क्वेरी को केवल DISTINCT पर अतिरिक्त कॉलम की आवश्यकता होगी यदि इस तरह के डेटा का अर्थ है - उदाहरण के लिए, यह अतिरिक्त कॉलम समान DISTINCT कॉलम के लिए समान हैं। – grigoryvp

उत्तर

8

उपयोग:

SELECT MIN(t.a) AS A, 
     t.b 
    FROM TABLE t 
GROUP BY t.b 
9
 
sqlite> SELECT * FROM t GROUP BY b; 
2|5 
4|6 
(for each b: one (unpredictable) value of a) 

sqlite> SELECT * FROM (SELECT * FROM t ORDER BY a DESC) GROUP BY b; 
1|5 
3|6 
(for each b: the row with min a) 

sqlite> SELECT * FROM (SELECT * FROM t ORDER BY a ASC) GROUP BY b; 
2|5 
4|6 
(for each b: the row with max a)