1

documentsフィールド id、title、version、および content を持つという名前のテーブルがあります。

ここで、最新バージョンのすべてのタイトルのすべての ID (または行) を取得したいと考えています。

次のデータがあるとします。

+----+-------+---------+---------+
| 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  |
+----+-------+---------+---------+

ID 4、6、7、またはこれらのエントリの行全体を受け取りたいです。

数百のエントリしかないため、パフォーマンスは問題になりません。

4

4 に答える 4

4

行全体を取得するにGROUP BY versionは、MAX()集計を使用し、それをテーブル全体に対するサブクエリとして結合して、残りの列を取得する必要があります。組み合わせによってタイトルの最高のバージョンが一意に識別されるため、JOIN条件は組み合わせに反する必要があります。title, version

以下は、使用している RDBMS とは無関係に機能するはずです。

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)
于 2012-06-21T17:41:15.570 に答える
1

これは、次の単純なグループです。

select max(version)
from documents
group by title

必要に応じてドキュメントに結合して、完全なドキュメント情報を取得できます。

于 2012-06-21T17:41:37.167 に答える
0

これにより、必要な ID が取得されます。

  Select max(id) as id from documents
group by title
  having count(1) = max(version)
order by id
于 2012-06-21T18:02:14.187 に答える
0

どうですか:

SELECT * FROM dataz
WHERE version IN (
  SELECT TOP 1 version
  FROM dataz
  ORDER BY version DESC
)
于 2012-06-21T17:40:56.413 に答える