SQLite LEFT JOIN + GROUP BY + ORDER BY

时间:2017-07-21 21:47:05

标签: android sqlite 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;

当我在服务器端尝试MySQL时,此查询工作正常。 但是,它在使用SQLite的Android应用程序上无法正常工作:我获得所有主题和正确数量的消息,但最后一条消息不是最新消息(看起来子查询中的ORDER BY是没有用的)

任何提示?

编辑: message.ts是一个TEXT NOT NULL,包含一个格式为" yyyy-MM-dd HH:mm:ss.SSS"。 当我查询所有消息并按ts订购时,订单没问题。

1 个答案:

答案 0 :(得分:2)

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

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