SQLite 左连接 + 分组依据 + 排序依据

Sim*_*non 2 sqlite android join android-sqlite

我正在将 SQLite 用于 Android 应用程序。

我有两个表:主题和消息。我想选择所有主题以及该主题的消息数和该主题的最后一条消息作为单个请求(使用子查询)。

我尝试了以下方法:

SELECT topic.*, COUNT(message.id), message.* FROM topic
LEFT JOIN (SELECT * FROM message ORDER BY message.ts DESC) AS message
ON topic.id=message.topic_id
GROUP BY topic.id;
Run Code Online (Sandbox Code Playgroud)

当我在服务器端的 MySQL 上尝试时,这个查询工作得非常好。但是,它在带有 SQLite 的 Android 应用程序上无法按预期工作:我获得了所有主题和正确数量的消息,但最后一条消息不是最新的消息(似乎子查询中的 ORDER BY 没有用) 。

有什么提示吗?

编辑:message.ts 是一个 TEXT NOT NULL,包含格式为“yyyy-MM-dd HH:mm:ss.SSS”的 ts。当我查询所有消息并按 ts 排序时,顺序是好的。

CL.*_*CL. 5

使用聚合时,保证返回组中的特定行的唯一方法是使用 MIN() 或 MAX()

SELECT topic.*,
       COUNT(*),
       message.*,
       MAX(message.ts)
FROM topic
LEFT JOIN message ON topic.id = message.topic_id
GROUP BY topic.id;
Run Code Online (Sandbox Code Playgroud)