2014-03-31 97 views
0

我想編寫一個查詢來獲取每個聯繫人發送或接收的最後一條消息。但不幸的group by clause正在通過編寫以下查詢來創建一些問題,例如,我得到發送給聯繫人的最後一條消息,並且如果沒有消息發送給聯繫人,則最後一條接收消息由此查詢返回。android sqlite group by clause

String where = "type=? OR type=?) GROUP BY (thread_id "; 
    String[] whereArgs = new String[] { "" + Constants.SMS_RECEIVE, 
      "" + Constants.SMS_SENT }; 

    try { 
     Cursor cursor = ctx.getContentResolver().query(Constants.URI_SMS, 
       smsProjection, where, whereArgs, "date DESC"); 

如果我刪除group by子句,我將獲得發送或接收到聯繫人的所有消息。

String where = "type=? OR type=? "; 
    String[] whereArgs = new String[] { "" + Constants.SMS_RECEIVE, 
      "" + Constants.SMS_SENT }; 

    try { 
     Cursor cursor = ctx.getContentResolver().query(Constants.URI_SMS, 
       smsProjection, where, whereArgs, "date DESC"); 

使用group by子句的主要目的是爲什麼從數據庫中獲取不相關的記錄。

回答

0

當您執行GROUP BY時,您可以獲得令人驚訝的字段結果,它對於SUM()或COUNT()等集合函數非常有用。根據您需要處理多個聯繫人的方式,您可以使用ORDER BY(某個日期字段)DESC,然後使用LIMIT來獲取最新的單個條目。