我正在尝试建立一个查询,该查询从两个连接的表中返回最新消息。但是我在分组依据上遇到了错误。也许我完全错误地对待了它。
我知道在我当前的实现中,我会得到一个列表,而不是最新列表,但是至少我想在开始时看到最新的列表
SELECT m.message, m.created_at
FROM conversations c
JOIN messages m ON c.id = m.conversation_id
WHERE m.conversation_id = 5
GROUP BY m.created_at DESC;
这是错误: SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'tawkifydb.dm.message',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by
不兼容答案 0 :(得分:1)
SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'tawkifydb.dm.message',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by
不兼容
SELECT中的每一列都应位于GROUP BY中(或使用汇总)。该错误表明SELECT中有m.message,但GROUP BY中没有m.message(并且它不是集合)
您需要这样的东西:
GROUP BY m.created_at, m.message
ORDER BY m.created_at DESC;
更新:我认为DESC也不应该在GROUP BY中,因此添加了ORDER BY
答案 1 :(得分:0)
您不需要join
表。完全不需要conversations
表:
SELECT m.message, m.created_at
FROM messages m
WHERE m.conversation_id = 5 AND
m.created_at = (SELECT MAX(m2.created_at)
FROM messages m2
WHERE m2.conversation_id = m.conversation_id
);
或者,在这种情况下,因为一次对话只需要一行,所以最简单的方法是:
SELECT m.message, m.created_at
FROM messages m
WHERE m.conversation_id = 5
ORDER BY m.created_at DESC
LIMIT 1;