-1

私はこのようなテーブルを持っています:

id | version | name
 1      1      name1 v1
 1      2      name1 v2
 1      3      name1 v3
 1      4      name1 v4
 2      1      name2 v1
 2      2      name2 v2
 2      3      name2 v3

このクエリを使用して、テーブル上のすべてのIDの最大バージョンを取得しようとしています。

SELECT a.id, MAX(a.version) AS version, b.name
FROM table1 a
INNER JOIN (
SELECT * FROM table1
) b
ON a.id = b.id AND a.version = b.version
GROUP BY a.id

しかし、代わりに次の結果が得られます。

 id | version | name
 1      4      name1 v1
 2      3      name2 v1

これを取得する必要がある場合:

id | version | name
 1      4      name1 v4
 2      3      name2 v3

事前に感謝します、どんな助けでも大歓迎です

編集:

selectステートメントにmax(b.name)を追加すると、トリックがうまくいくことに気づきました。

とにかく、@ bluefeet、@ user2001117、@rsに感謝します。と@BramGerritsen。すべてのクエリは魅力のように機能します=)

4

4 に答える 4

1

これを行う

SELECT a.id, a.version, a.name
FROM table1 a
INNER JOIN (
SELECT id, max(version) version FROM table1
GROUP BY id
) b
ON a.id = b.id AND a.version = b.version
于 2013-02-15T15:19:41.753 に答える
1

これを試してください:

 SELECT a.id, a.version, a.name
    FROM table1 a
    INNER JOIN (
    SELECT id, max(version) version FROM table1
    GROUP BY id
    ) b
    ON a.id = b.id AND a.version = b.version
于 2013-02-15T15:20:25.230 に答える
1

サブクエリで集計を使用するには、クエリを変更する必要があります。max(version)サブクエリでforeachを取得したらid、それらを両方の値でテーブルに結合し、正しい結果を返します。

select a.id,
  a.version,
  a.name
from table1 a
inner join
(
  select max(version) MaxVersion, id
  from table1 
  group by id
) b
  on a.id = b.id
  and a.version = b.maxversion

SQL FiddlewithDemoを参照してください

于 2013-02-15T15:20:26.273 に答える
1
SELECT a.id, a.version, a.name
FROM table1 a
INNER JOIN (
SELECT id, max(version) version FROM table1
GROUP BY id
) b
USING(id, version)
于 2013-02-15T15:24:39.833 に答える