2011-02-04 5 views
1

テーブルから最新の履歴テーブルレコードを選択するための正しいSQLクエリを見つけようとしています(MySQLの場合)。履歴テーブルレコードの正しいSQLクエリを見つけることができません

私のアプリケーションでは、すべてのデータ変更の履歴を保存したいと考えています。だから、私の考えは、既存のレコードをUPDATEするのではなく、新しいレコードをINSERTすることです。さらに、改訂カウンタがあり、レコードの変更ごとに増加します。

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
4 4  1   0  0  SUSANN ABC123  0 
5 4  1   0  1  SUSANN 123ABC  0 
6 4  1   0  2  SUSANN 123ABC  1 
7 4  1   1  3  SUSANN 123ABC  1 

注実際すなわち "SUSANN" の同じレコード、ある4〜7 UIDを持つ行:

は、これが私のテーブルです。行4は最初の行です。行5はパスワードを変更し、行6は管理フラグを変更し、行7は削除フラグを変更した。

uidは、自動インクリメンタであり、内部目的でテーブル内の行を識別します。 は、が実際のレコードIDです。

今すぐ。単一のレコードの最新のリビジョンを選択すると、この方法で行うことができます。

SELECT *を表 FROM WHEREリビジョンDESC私の問題は、すべての最新のリストを選択している1

LIMIT BY = 4 ORDER RIDすべてのログインのリビジョン:サンプルデータに基づいて、結果セットは次のようになります。

 
uid rid created_by deleted revision username password admin 
1 1  0   0  0  stefan abcdefg  1 
2 2  1   0  0  maria  bcdefgh  1 
3 3  1   0  0  carl  cdefghi  0 
7 4  1   1  3  SUSANN 123ABC  1 

誰かが私を正しい方向に向けることができますか?私は適切なキーワードがすでに十分であると思う。そこから私はおそらく道を見つけ出すことができた。

ありがとうございました。

答えて

2

これは動作するはずです。それだけです...ちょっとタイプミス以外にも、それは私が望んでいたまさにん

SELECT t.* 
FROM table t 
JOIN (SELECT rid, MAX(revision) MaxRevision FROM table GROUP BY rid) mt 
ON t.rid = mt.rid AND t.revision = mt.MaxRevision 
+0

を。ラマクありがとうございます。 –

関連する問題