我想编写一个查询,以便向每个联系人发送或接收最后一条消息。但是不幸的group by子句正在创建一些问题,例如通过编写以下查询我得到发送给联系人的最后一条消息,如果没有消息发送给联系人,那么此查询将返回最后一条接收消息。
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 :(得分:0)
当您进行GROUP BY时,您可以获得字段的惊人结果,它对SUM()或COUNT()等聚合函数最有用。根据您需要处理多个联系人的方式,可以使用ORDER BY(某些日期字段)DESC,然后使用LIMIT获取最近的单个条目。