मैं उच्चतम संस्करण के साथ सभी प्रविष्टियों का चयन कैसे कर सकता हूं?

मेरे पास दस्तावेज़ नामक एक सारणी है जिसमें फ़ील्ड आईडी, शीर्षक, संस्करण और सामग्री है।

अब मैं उच्चतम संस्करण वाले प्रत्येक शीर्षक के लिए सभी आईडी (या पंक्तियां) प्राप्त करना चाहता हूं।

मान लीजिए मेरे पास निम्न डेटा है:

+----+-------+---------+---------+
| id | title | version | content |
+----+-------+---------+---------+
|  2 | foo   |       1 | abc1    |
|  3 | foo   |       2 | abc2    |
|  4 | foo   |       3 | abc3    |
|  5 | bar   |       1 | abcd1   |
|  6 | bar   |       2 | abcd2   |
|  7 | baz   |       1 | abcde1  |
+----+-------+---------+---------+

मैं या तो इन प्रविष्टियों के लिए ids 4,6,7 या पूरी पंक्तियां प्राप्त करना चाहता हूं।

प्रदर्शन एक मुद्दा नहीं है क्योंकि केवल कुछ सौ प्रविष्टियां होंगी।

0
जोड़ा संपादित
विचारों: 1
इस मामले में मैं स्क्लाइट 3 का उपयोग करता हूं
जोड़ा लेखक ayckoster, स्रोत
आप उन्हें समूह कर सकते हैं। एक महान उदाहरण यहां है: stackoverflow.com/questions/3998529/…
जोड़ा लेखक David Manheim, स्रोत
आप आरडीबीएमएस क्या उपयोग कर रहे हैं?
जोड़ा लेखक Philip Kelley, स्रोत

4 उत्तर

यह आपके इच्छित आईडी प्राप्त करेगा:

  Select max(id) as id from documents
group by title
  having count(1) = max(version)
order by id
0
जोड़ा

यह एक साधारण समूह है:

select max(version)
from documents
group by title

यदि आप चाहें तो दस्तावेज़ों में वापस शामिल हो सकते हैं, पूर्ण दस्तावेज़ जानकारी प्राप्त करने के लिए।

0
जोड़ा

संपूर्ण पंक्तियों को पुनर्प्राप्त करने के लिए, आपको MAX() कुल के साथ GROUP BY संस्करण की आवश्यकता है, और शेष कॉलम को खींचने के लिए पूरी तालिका के विरुद्ध एक सबक्वायरी के रूप में शामिल हों। जॉइन स्थिति शीर्षक, संस्करण के संयोजन के विरुद्ध होने की आवश्यकता होगी क्योंकि वे एक शीर्षक के सबसे बड़े संस्करण की विशिष्ट पहचान करते हैं।

निम्नलिखित आरडीबीएमएस का आप स्वतंत्र रूप से काम करना चाहिए:

SELECT 
  documents.id,
  documents.title, 
  documents.version,
  documents.content
FROM 
  documents
  JOIN (
    /* subquery pulls greatest version per title */
    SELECT
      title,
      MAX(version) AS version
    FROM documents
    GROUP BY title
    /* title, version pair is joined back against the main table */
  ) maxversions ON (documents.title = maxversions.title AND documents.version = maxversions.version)
0
जोड़ा

कैसा रहेगा:

SELECT * FROM dataz
WHERE version IN (
  SELECT TOP 1 version
  FROM dataz
  ORDER BY version DESC
)
0
जोड़ा