如何从呼叫记录中检索具有唯一编号而不重复的行

问题描述 投票:0回答:1

如何从SQLite(Android)的CallLog.Calls表中检索号码?

例如,如果1234567890号码表中有10个通话记录,我需要最新的通话记录。目前,我正在通过检查单独函数中的重复项来做到这一点。

是否有任何方法可以过滤查询本身?

String[] projection = {CallLog.Calls.NUMBER, CallLog.Calls.DURATION, 
CallLog.Calls.DATE, CallLog.Calls.TYPE};

Cursor cursor= getContentResolver().query(CallLog.Calls.CONTENT_URI, 
projection, null, null, CallLog.Calls.DATE + " DESC");
android sqlite android-sqlite android-contentresolver
1个回答
0
投票

假设

  • 列名称为callNumber,callDuration,callDate和callType,并且该表称为calllog
  • callDate列是合适的格式(可排序,例如YYYY-MM-DD hh:mm)

然后您可以基于:-

查询
SELECT * FROM calllog WHERE callNumber = '1234567890' ORDER BY callDate DESC LIMIT 1;

演示

CREATE TABLE IF NOT EXISTS  calllog (callNumber TEXT, callDuration INTEGER, callDate TEXT, callType TEXT);
INSERT INTO calllog VALUES 
    /* log entries for wanted number */
    ('1234567890', 30, '2019-01-01 10:30','mobile'),
    ('1234567890', 10, '2019-01-01 12:30','mobile'),
    ('1234567890', 5, '2019-01-02 10:30','mobile'),
    ('1234567890', 30, '2019-01-03 10:30','mobile'),
    ('1234567890', 30, '2019-01-04 10:30','mobile'),

    /* other log entries to exclude */
    ('1234567899', 30, '2019-01-01 10:30','mobile'),
    ('1234567899', 10, '2019-01-01 12:30','mobile'),
    ('1234567899', 5, '2019-01-02 10:30','mobile'),
    ('1234567899', 30, '2019-01-03 10:30','mobile'),
    ('1234567899', 30, '2019-01-04 10:30','mobile')
;

SELECT * FROM calllog WHERE callNumber = '1234567890' ORDER BY callDate DESC LIMIT 1;

以上结果为:-

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.