【发布时间】:2020-09-24 13:18:35
【问题描述】:
首先,我不想使用语句
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
关闭完整组,因为它默认启用,我相信这是出于良好的目的。 但是,这也让我很头疼。
我在 MySQL 中有一个非常简单的 2 个数据库表:
聊天和聊天消息。 chat 有很多聊天消息。 聊天有一个名为 status 的列
现在我想查找所有状态为“活动”的聊天记录 ID,按其聊天消息发送日期排序在一条 SQL 语句中
因此,我创建了以下 SQL:
Select chat_messages.chat_id from chat_messages, chats where chats.status='active' and chat_messages.chat_id=chats.id group by chat_messages.chat_id order by chat_messages.send_date desc
好的,现在当我执行上述 SQL 时,我收到错误消息:
[Code: 1055, SQL State: 42000] Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'chat_messages.send_date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
如果我将send_date放入group by,结果只会返回多条重复的聊天记录,因为每个聊天表记录都有多条聊天消息记录,并且每条聊天消息记录都有不同的send_date值。
好的,现在的问题是:不关闭only_full_group_by,如何在一条sql语句中达到目的?
谢谢。
** 更新**
不确定为什么 stackoverflow 会将问题标记为与其他不必要的帖子重复。这显然与那个问题不同,因为这个问题试图解决打开 ONLY_FULL_GROUP_BY 时的错误消息。
过去,在引入完整分组之前,该查询非常简单,但现在它开始出现错误。我希望该网站知道没有一种适合所有人的方法,并且不要再制造新问题,因为过去没有过时的解决方案,因为这无济于事,只会误导其他人。
【问题讨论】:
标签: mysql sql datetime subquery max