【发布时间】:2021-03-18 13:27:39
【问题描述】:
我在 sqlite 数据库中有 2 个表:Chats 和 Inboxcache。我需要加入这两个表,并创建一个收件箱列表。
收件箱项目将包含收件箱缓存中的所有记录,并找到该收件箱(对话)的最新聊天项目并获取其文本。
这是我目前的sql语句。
SELECT ch.ConversationID, Max(ch.Time) As Date, ch.Text, ic.SenderMessageName, ic.IsReader FROM ConversationHistoryDocument ch INNER JOIN InboxCache ic ON ic.ConversationID = ch.ConversationID WHERE ch.ConversationID ='{conversationId}' GROUP BY ch.ConversationID ORDER BY ch.Time Desc
它在大多数情况下都很好用,但如果聊天表有相同日期时间的记录。当它对收件箱缓存表进行内部连接时,它会选择第一条记录。但我需要最后一个。我应该如何为此更改 SQL 语句?
【问题讨论】:
-
如果时间只显示日期 (YYYY/MM/DD) 我建议你也添加时钟。如果你也添加了时钟,我建议让时钟更精确,微秒或毫秒
-
能否分享示例数据和预期结果。
-
@AFarmanbar : 时间保存在纪元时间(unix ticks)
-
@LibinJoseph 所以我建议在 WHERE 子句中使用记录的索引,更高的索引优先。
-
@LibinJoseph 你也可以在 SELECT 语句中使用
Max(index)。