这是我的sqlite
表:
_ID | DATE_INSERTED | LATITUDE | LONGITUDE | TRACKER_ID | DATA
我需要Cursor
获取DATE_INSERTED
的最后插入行(TRACKER_ID
),其中LATITUDE
和LONGITUDE
不等于& #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
的最后一行。我猜DISTINCT
和GROUP 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
答案 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