2011-07-21 2 views
1
public Cursor fetchAllPBs() {  
    String sql = "SELECT * FROM " + CAPTURES_TABLE + " GROUP BY " + KEY_CAPTURES_SPECIES 
      + " ORDER BY " + KEY_CAPTURES_POUNDS + " DESC, " + KEY_CAPTURES_OUNCES + " DESC, " + KEY_CAPTURES_DRAMS + " DESC;"; 
    Cursor c = mDb.rawQuery(sql, null); 
    if(c != null) { 
     c.moveToFirst(); 
    } 
    return c; 
} 

こんにちはため、トップ1を返し、SQLiteの3つの分野によるため、各カテゴリ

は、私は上記のクエリは私に返すようにしたい利用者のそれぞれの種のための最高の個人的な、つまり、それぞれの種の中で最も重いアイテム。私は問題を認識しました。私はまだこのプロジェクトのSQLに比較的新しいです...

私は7lb 6oz 0drmsのデータベースに 'Chub'を追加してから、7lb 2oz 0drmsの別のものを追加します - それは最近追加された魚をPBと最大のものではない(7ポンド2オンスのもの)。しかし、それから8ポンドの0ポンドのチャブを追加すると8ポンドの魚が返ってくるでしょう。それはオンスで注文するのが適切ではないと思われます。

ここで間違っていることを誰にでも見せて解決策を提案できますか?

感謝

+1

注文フィールドは数字ですか?そうであれば、クエリは適切に動作するはずです。 – Jacob

+0

私は間違った質問をしました。それは問題を持っている正しいクエリに今修正されました... – Garcon

答えて

1

まず、種ごとに最も重い魚を決定するためにサブクエリが必要です。 第2に、あなたの体重は3列に分割されているので、それらをいくらか加算する必要があります。私は乗算を加えるだけで、最大値を得るのに十分なはずです。

SELECT * 
FROM CAPTURES_TABLE AS C1 
WHERE (100*Pounds+10*Ounces+Drams) = 
     (SELECT MAX(100*Pounds+10*Ounces+Drams) 
     FROM CAPTURES_TABLE AS C2 
     WHERE C2.SPECIES=C1.SPECIES) 
ORDER BY pounds DESC, ounces DESC, drams DESC 
+0

伝説。私は永遠に感謝しています! – Garcon

1

コメントの詳細が、私はより多くのスペースを必要とする...

私はあなたのクエリを簡素化した場合には、次のようになります。

種は ないであることを提供
SELECT * FROM table1 WHERE species = species_id 
ORDER BY pounds DESC, ounces DESC, drams DESC LIMIT 1 

一意のフィールド、クエリは正常です。

新しい魚を追加するときに追加するのではなく、実際に魚を置き換えるときは、limit 1を削除してすべての魚が表示されるかどうかを確認することが問題のようです。
注文句は間違いなく正しいです。

+0

私はちょうど実現しました、これは*正しい*であり、動作します。私は間違った質問をしました!私はfetchPB(speciesId)とfetchAllPBs()を持っており、後者は動作しません。私は今質問を修正して、動作しないクエリについて質問しました... – Garcon

関連する問題