每个parent_id仅选择最后插入的行

时间:2014-09-02 13:29:46

标签: android android-sqlite android-cursorloader

这是我的sqlite表:

_ID | DATE_INSERTED | LATITUDE | LONGITUDE | TRACKER_ID | DATA

我需要Cursor获取DATE_INSERTED的最后插入行(TRACKER_ID),其中LATITUDELONGITUDE不等于& #34; 0"

我在CursorLoader中这样做,这是我可以得到的地方:

public static CursorLoader getLoaderForLastMessages(Context context) {
    String sel = MessageTable.LONGITUDE + " !=? and " + MessageTable.LATITUDE + " !=?";
    String[] selArgs = {"0", "0"};
    return new CursorLoader(context, GpsProvider.MESSAGE_CONTENT_URI, null, sel, selArgs, null);
}

我不知道如何只选择TRACKER_ID的最后一行。我猜DISTINCTGROUP BY是好词,但我不知道如何正确使用它们。

原始SQLITE查询也是一个很好的答案,我会将其改编为我的代码。

编辑: 为了澄清我需要一个像这样的光标:

_ID | DATE_INSERTED | LATITUDE | LONGITUDE | TRACKER_ID | DATA
 3  | 23424123      | 13       | 43        |     1      | data
 6  | 23563344      | 25       | 56        |     2      | data
19  | 56573473      | 37       | 12        |     3      | data
43  | 23635743      | 82       | 99        |     4      | data

3 个答案:

答案 0 :(得分:0)

您可以在表中查询最后插入的RowID:

//获取表格的最后一个插入的唯一主要ID(_id)。

public int getPrimaryId() {
    final String MY_QUERY = "SELECT MAX(_id) FROM " + DATABASE_TABLE0;
    Cursor cur = mDb.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}   

您可以使用此ID在查询中指定并在光标中加载结果。

答案 1 :(得分:0)

试试这个:

String selectQuery = "SELECT  * FROM " + <TABLE_NAME> + " WHERE TRACKER_ID = \"" + <trackID> + "\" AND LATITUDE != '0' AND LONGITUDE != '0' AND DATE_INSERTED = \"" + <date>" ;
Cursor cursor = sqliteDatabase.rawQuery(selectQuery, null);

if(cursor.moveToLast()){

//Get the value here using cursor.getString(<column number>)

}

答案 2 :(得分:0)

可以是选择查询,如:

SELECT A._ID , A.DATE_INSERTED , A.LATITUDE , A.LONGITUDE , A.TRACKER_ID , A.DATA
FROM MY_TABLE A
JOIN
(
    SELECT TRACKER_ID, MAX(DATE_INSERTED) MAX_DATE_INSERTED FROM MY_TABLE
    WHERE LATITUDE <> '0' AND LONGITUDE <> '0'
) B

ON A.TRACKER_ID = B.TRACKER_ID
AND A.DATE_INSERTED = B.MAX_DATE_INSERTED