2016-09-05 15 views
0

テーブルから2つの最後の要素を取得する必要があります。私の要素のIDは増加しますが、増分ではありません(次の値は常に大きくなりますが、1つ以上の要素が他の人によって作成されている可能性があります)。私は28(それが動作)と25を取得したいSQLiteは最後の要素を2番目に取得します

1 4 7 11 14 15 19 25 28

:IDの例

public Long getLastDay(){ 
Cursor cursor= mDatabase.query(DatabaseHelper.TABLE_DAYS, new String[]{"MAX(" + DatabaseHelper.COLUMN_DAY_ID + ")"}, null, null, null, null, null); 
    if (cursor != null) { 
     cursor.moveToFirst(); 
     return (cursor.getLong(0)); 
    } 
    return Long.parseLong("0"); 
} 

は、私がどのように、最後の1のidそれを知っています。

どのようにして2番目の値を取得できますか?

@EDIT:

私のコードは次のとおりです。

public Long getSecondLastDay(){ 
     Cursor cursor= mDatabase.rawQuery("SELECT "+DatabaseHelper.COLUMN_DAY_ID+" FROM " + DatabaseHelper.TABLE_DAYS+ " LIMIT 2", null); 
     if (cursor != null) { 
      cursor.moveToFirst(); 
      return (cursor.getLong(0)); 
     } 
     return Long.parseLong("0"); 
    } 
+0

'cursor.moveToLast() ;カーソル.moveToPrevious(); ... ...順番... – Shaishav

+0

その列の最大値ではない 'COLUMN_DAY_ID'を選択し、結果を2つの項目(" LIMIT 2 ")に制限するには、[here](https: //www.sqlite.org/lang_select.html)詳細は – pskink

+0

@pskinkカーソルで何をすればいいのか教えてください。私は 'Cursor cursor = mDatabase.query(DatabaseHelper.TABLE_DAYS、new String [] {" SELECT * FROM "+ DatabaseHelper.COLUMN_DAY_ID +" LIMIT 2 "}、null、null、null、null、null)のようなものを使用する必要があります。 ?またはこの値はどこですか? – barmi

答えて

0

ソートして、ちょうど取ります最初の2行:

Cursor cursor = mDatabase.query(DatabaseHelper.TABLE_DAYS, 
     new String[]{ DatabaseHelper.COLUMN_DAY_ID }, 
     null, null, null, null, 
     DatabaseHelper.COLUMN_DAY_ID + " DESC", 
     "2"); 
long secondToLastDay = 0, lastDay = 0; 
if (cursor.moveToFirst()) { 
    lastDay = cursor.getLong(0); 
    if (cursor.moveToNext()) 
     secondToLastDay = cursor.getLong(0); 
} 
0

使用cursor.moveToLastと逆方向の日、その後cursor.moveToPreviuous

+0

動作しません – barmi

+0

ユーザーcursor.moveToLast(); cursor.moveToPrevious()、System.out.println(cursor.getColumnIndex(あなたの列))何を返すか教えてください。 –

関連する問題