2017-06-14 13 views
0

期待された結果をどのように達成できるかは分かりませんが、基本的には、release_number、filename、serverがmax(リビジョン) 。意図は、結果を使用して、指定されたテーブルのすべてのオブジェクトの最新バージョンを取得することです。私は途中でmysqlを使用しています。テーブル上のすべてのオブジェクトの最新のリビジョンを選択

表の内容

id release_number filename  server revision 
18271 00.00.01  content.text local  7530 
18414 00.00.02  content_b.text remote 7859 
18415 00.00.02  content_a.text remote 7955 
18565 00.00.03  content.text local  8186 
18608 00.00.04  content_b.text remote 8248 

期待される結果

id release_number filename  server revision 
18415 00.00.02  content_a.text remote 7955 
18565 00.00.03  content.text local  8186 
18608 00.00.04  content_b.text remote 8248 

EDIT:

これで問題が解決しているようだが、私はそれが正しいかどうかわからないんだけどそれを行う方法は、より多くの経験を持つ人は確認してください?

select * from table where id in (
    SELECT max(id) 
    FROM table 
    GROUP BY server, filename 
    HAVING max(revision) 
) 

答えて

0

各ファイル名の最新のリビジョン番号を検索し、元のテーブルに

SELECT a.* 
FROM yourtable a 
     INNER JOIN (SELECT Max(revision) AS Max_revision, 
          filename 
        FROM yourtable 
        GROUP BY filename) b 
       ON a.filename = b.filename 
        AND a.revision = b.Max_revision 

それとも、あなたが私をチェックすることができ、こんにちはcorrelated subquery

SELECT * 
FROM yourtable a 
WHERE revision = (SELECT Max(revision) 
        FROM yourtable b 
        WHERE a.filename = b.filename) 
+0

@Prdpを使用することができ、結果を参加何か意味があるかどうかを確認するために編集しますか? –

+0

@Serg Lol yeah:D –

関連する問題