0

次のようなデータベーステーブルがあります。

| ID | TITLE | VERSION | 
| 1  | file1 |    1    |
| 2  | file2 |    1    |
| 3  | file1 |    2    |
| 4  | file2 |    2    |

3行目と4行目はfile1とfile2の最新バージョンであるため、これらを返すSQLクエリが必要です。

次のようなテーブルでクエリを実行すると、次のようになります。

| ID | TITLE | VERSION | 
| 1  | file1 |    1    |
| 2  | file2 |    1    |
| 3  | file1 |    2    |
| 4  | file2 |    2    |
| 5  | file3 |    1    |

「file3」version1はfile3の最新バージョンであるため、行3、4、および5を返す必要があります。

SQLで「MAX」関数を使用する必要があることはわかっていますが、「GROUPBY」キーワードを使用すると失敗します。使い方がよくわかりません。

すべて/アドバイスをいただければ幸いです!

Oracle11gを使用しています。

4

2 に答える 2

3

実際、サブクエリを使用してMAX、でグループ化されたバージョン を取得しTITLE、その結果をテーブルと結合して:を取得しますID

SELECT t.*
FROM tbl t INNER JOIN 
     (SELECT title, MAX(version) version
      FROM tbl
      GROUP BY title
     ) max_t ON (t.version = max_t.version AND t.title = max_t.title);

デモ

于 2012-09-12T23:20:04.587 に答える
0

実際、これを行う最良の方法は、ランキング関数を使用することです。

select id, title, version
from (select t.*
             row_number() over (partition by id order by version desc) as seqnum
      from t
     ) t
where seqnum = 1

関数row_number()は、Oracleでは分析関数と呼ばれます。番号1、2、3を割り当てます。。。パーティショニング句に基づいて、各行に。番号は各IDから始まり、最大バージョンは1から始まります。

于 2012-09-13T00:54:40.353 に答える