SELECT mindate.rID
FROM
    (SELECT rID, mID, count(mID), min(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS mindate,
    (SELECT rID, mID, count(mID), max(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS maxdate
WHERE mindate.stars > maxdate.stars

यह एक उदाहरण क्वेरी है जो काम नहीं करती है, क्योंकि मैं केवल "mindate.rID" या "maxdate.rID" का चयन कर सकता हूं या यह मुझे एक "अस्पष्ट कॉलम नाम - त्रुटि" देता है, हालांकि या तो वह प्रविष्टि हो सकती है जिसकी मुझे आवश्यकता है। इसे हल करने का एकमात्र तरीका "चयन *" का उपयोग करना है, लेकिन इसे हल करने का एक और शानदार तरीका होना चाहिए, है ना?

0
Mark Rensen 14 मार्च 2020, 23:39

1 उत्तर

सबसे बढ़िया उत्तर

SQLite के लिए आप दोनों कॉलम चुन सकते हैं यदि वे तालिका के नाम/उपनाम से योग्य हैं:

SELECT mindate.rID, maxdate.rID

यदि आप इस तरह की समस्या का सामना करते हैं तो मुझे संदेह है कि इसका SQLite से कोई लेना-देना नहीं है, बल्कि उस टूल या प्रोग्रामिंग भाषा से है जिसका उपयोग आप इस क्वेरी को चलाने के लिए करते हैं।
किसी भी मामले में यह एक अच्छा अभ्यास है कि परिणाम में एक ही नाम के साथ 2 कॉलम न हों, इसलिए आपको उन्हें उपनाम देना चाहिए:

SELECT mindate.rID minID, maxdate.rID maxID

एक डेमो देखें।

यदि आप चाहते हैं कि किसी शर्त के आधार पर 2 कॉलम में से केवल एक को वापस करना है तो CASE अभिव्यक्ति का उपयोग करें:

SELECT CASE WHEN <condition> THEN mindate.rID ELSE maxdate.rID END
1
forpas 14 मार्च 2020, 21:09