android sqlite group by子句

时间:2014-03-31 06:41:54

标签: android database sqlite

我想编写一个查询,以便向每个联系人发送或接收最后一条消息。但是不幸的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子句的原因是为什么要从数据库中获取不相关的记录。

1 个答案:

答案 0 :(得分:0)

当您进行GROUP BY时,您可以获得字段的惊人结果,它对SUM()或COUNT()等聚合函数最有用。根据您需要处理多个联系人的方式,可以使用ORDER BY(某些日期字段)DESC,然后使用LIMIT获取最近的单个条目。