Ios 如何根据发送日期订购显示的用户消息?

Ios 如何根据发送日期订购显示的用户消息?,ios,sqlite,Ios,Sqlite,我有一个在SQLite数据库中存储用户消息数据的应用程序。我希望能够访问每个消息线程的最新文本。目前,我有一种从本地数据库提取信息的方法,如下所示: var messagesPulled: [pulledMessage]! if openDatabase(){ let query = "select * from messages order by messageNumber asc" do{ pr

我有一个在SQLite数据库中存储用户消息数据的应用程序。我希望能够访问每个消息线程的最新文本。目前,我有一种从本地数据库提取信息的方法,如下所示:

var messagesPulled: [pulledMessage]!

        if openDatabase(){
            let query = "select * from messages order by messageNumber asc"
            do{
                print(database)
                let results: FMResultSet = try database.executeQuery(query, values: nil)

                while results.next(){

                    let message = pulledMessage(convoWithUserID: String(describing: results.string(forColumn: "convoWithUserID")), convoWithUserName: String(describing: results.string(forColumn: "convoWithUserName")), messageString: String(describing: results.string(forColumn: "messageString")), senderID: String(describing: results.string(forColumn: "senderID")), timeSent: String(describing: results.string(forColumn: "timeSent")), messageNumber: Int(results.int(forColumn: "messageNumber")))
                    if messagesPulled == nil{
                        messagesPulled = [pulledMessage]()
                    }
                    messagesPulled.append(message)
                    print("The message that we have pulled are \(message)")
                }

            }
            catch{
                print(error.localizedDescription)
            }

            database.close()
        }
        return messagesPulled
问题是,我希望每个消息线程(基于
convalwithuserid
)都是数组中自己的单个对象,以填充表(想想iOS消息应用程序上用户之间的定期消息传递)。这并不难,可以通过以下方式实现:

func pullSQLData(messageSet: [message]) -> [String:[message]]{
    var i = 0
    var messageUserID = String()
    while i < messageSet.count{
        if (messageSet[i]).userID != messageUserID{
            print("It wasn't equal")
            print(messageSet[i])
            messageUserID = messageSet[i].userID
            if messageConvoDictionary[messageUserID] != nil{
                messageConvoDictionary[messageUserID]?.append(messageSet[i])
            }else{
                messageConvoDictionary[messageUserID] = []
                messageConvoDictionary[messageUserID]?.append(messageSet[i])
            }
            i = i + 1
        }else{
            messageConvoDictionary[messageUserID]?.append(messageSet[i])
            i = i + 1
        }
    }
    print(messageConvoDictionary)
    print(i)
    return messageConvoDictionary

}

(对于本例,xyz987将是当前用户的用户ID)。我希望常规“查看所有消息”表中的每个单元格(如打开iPhone上的消息应用程序并查看所有对话)显示每个对话中的最新消息。在这种情况下,我会看到两个单元格,一个是jason刚刚发送的消息,带有时间戳4:52的“否”,另一个是kevin刚刚发送的消息,带有时间戳4:39的“无”。显然,最近的消息不会每次都是表的最后一行。

要为每组表行获取一个输出行,请使用group BY。要选择从哪个行返回数据,请使用MAX()(这需要SQLite 3.7.11或更高版本):


请提供一些示例数据和所需输出。(有关如何添加一些内容,请参见。)@CL。请参见修改后的问题,其中包括示例SQL数据库以及我希望从中获得的内容的另一个解释。这不是问题之一。@CL。我已将字符串更新为适当的格式。他们之前只是我当场编造的,因此是错误的。在应用程序中,它们将由
Date()
函数以正确的格式自动创建,因此它们是正确的。但是,如何根据问题组织数据?毫秒是可选的(请参见),但小时格式仍然错误。
convoWithUserID  convoWithUserName  messageString  sender      timeSent      messageNumber

abc123           kevin              yo man         xyz987      2017-11-01 4:23:07.000  1            
abc123           kevin              hey dude, wha  abc123      2017-11-01 4:25:13.000  2            
fgh456           jason              you going?     xyz987      2017-11-01 4:28:09.000  3            
abc123           kevin              nothing        xyz987      2017-11-01 4:39:47.000  4            
fgh456           jason              no             fgh456      2017-11-01 4:52:13.000  5    
SELECT ...,
       MAX(timeSent)
FROM messages
GROUP BY convoWithUserID
ORDER BY ...;