2011-06-18 14 views
1

SQLiteに関する質問があります。SQLite - 特定のフィールド値を持つ最新の行を選択します。

id | key | data 
1 | A | x 
2 | A | x 
3 | B | x 
4 | B | x 
5 | A | x 
6 | A | x 

新しいデータは、テーブルの末尾に自動インクリメントIDで付加されます。

は今、私はこのように、各キーの最新の行を返すクエリを作成したい:

id | key | data 
4 | B | x 
6 | A | x 

は、私はいくつかの異なるクエリを試してみたが、私は成功していません。テーブルの各「キー」値の最新の行のみをどのように選択しますか?

答えて

3

使用このSQL-クエリ:

select * from tbl where id in (select max(id) from tbl group by key); 
+0

は完璧に動作します!ありがとう – thesam

0
SELECT * 
FROM mytable 
    JOIN 
     (SELECT MAX(id) AS maxid 
      FROM mytable 
      GROUP BY "key" 
     ) AS grp 
     ON grp.maxid = mytable.id 

サイドノート:(。テーブルのために、フィールドなど)が識別子としてkeyのように予約語を使用しないことをお勧めします

0

あなたが分割することができ2つのサブルーチンへのメインタスク。

最初

今、あなたはイースリー最新の値を取得するクエリを書くことができ、ABキーの最新の値についてIDを取得し、その後、すべてのID /キー値を取得アプローチで移動することができますABの場合はのIDがABの両方の値があるためです。ネストされたSELECT文なし

0

、や結合が、フィールドには「最新」は、主キー(例えば自動インクリメント)で決定する場合にのみ:

SELECT * FROM table GROUP BY key DESC; 
関連する問題