Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在这里如何组合分组方式和订单方式?_Mysql_Database - Fatal编程技术网

Mysql 在这里如何组合分组方式和订单方式?

Mysql 在这里如何组合分组方式和订单方式?,mysql,database,Mysql,Database,我有一个数据库和一个叫做“messages”的表。列为时间戳的“发送者”、“接收者”、“主题”、“时间” 通过我的查询,我想得到按主题分组的条目。但我想有相应的时间是最晚的 例如,如果这是我的数据库: person1 | person2 | hello | 2019-06-24 20:0**7**:00 person2 | person1 | hello | 2019-06-24 20:0**8**:00 我想得到这个: subject: hel

我有一个数据库和一个叫做“messages”的表。列为时间戳的“发送者”、“接收者”、“主题”、“时间”

通过我的查询,我想得到按主题分组的条目。但我想有相应的时间是最晚的

例如,如果这是我的数据库:

person1   |   person2   |   hello   |   2019-06-24 20:0**7**:00
person2   |   person1   |   hello   |   2019-06-24 20:0**8**:00
我想得到这个:

subject: hello
last entry: 2019-06-24 20:0**8**:00
我无法将ORDER BY放在GROUP BY前面,因此我尝试了子查询:

SELECT subject, sender, receiver, time
FROM 
    (SELECT subject, sender, receiver, time
     FROM messages
     ORDER BY time DESC) AS subselect
GROUP BY subject
但它不起作用,我也不知道为什么


有人能帮我吗?

我相信这就是你想要的:

按主题从邮件组中选择主题、发件人、收件人、MAXtime作为时间 所以,它是这样工作的:

获取本例中的相关记录-所有记录,如未提供 按主题列对它们进行分组,因此现在我们有了具有相同主题的记录组 在每个组中,它都会查找“时间最大值”列,但这是每个组的,所以,我想这就是您想要的
如果您想以某种方式对组进行排序,只需在末尾添加另一个ORDER BY,而不需要任何子查询。

我相信这就是您要寻找的:

SELECT subject,sender,reseiver,max(time) 
FROM messages
GROUP BY subject,sender,reseiver
ORDER BY max(time) DESC
按主题从邮件组中选择主题、发件人、收件人、MAXtime作为时间 所以,它是这样工作的:

获取本例中的相关记录-所有记录,如未提供 按主题列对它们进行分组,因此现在我们有了具有相同主题的记录组 在每个组中,它都会查找“时间最大值”列,但这是每个组的,所以,我想这就是您想要的 如果您想以某种方式对组进行排序,只需在末尾添加另一个ORDER BY,而不需要任何子查询

SELECT subject,sender,reseiver,max(time) 
FROM messages
GROUP BY subject,sender,reseiver
ORDER BY max(time) DESC
您应该按发送者分组,也可以按reseiver分组,否则这些列将具有不可预测的值。或者完全省略这些列


您应该按发送者分组,也可以按reseiver分组,否则这些列将具有不可预测的值。或者完全省略这些列。

在MySQL 8.x中很容易做到。在5.x中不是那么容易。你有哪个MySQL版本?可能使用MySQL 5.7复制Im:PNo它不工作。。如果它执行,你就用你的结果集玩俄罗斯轮盘赌。。在启用了sql模式的服务器上,此查询只会导致\u full\u group\u出错,因为您在MySQL 8.x中误用了group BYEasy to do。在5.x中不是那么容易。你有哪个MySQL版本?可能使用MySQL 5.7复制Im:PNo它不工作。。如果它执行,你就用你的结果集玩俄罗斯轮盘赌。。在启用sql模式的服务器上,此查询只会导致\u full\u group\u出错,因为您误用group BYNo它不起作用。。如果它执行,你就用你的结果集玩俄罗斯轮盘赌。。在启用了sql模式的服务器上,此查询仅\u full\u group\u将出错。对于问题中的原始查询,仅\u full\u group\u by也将失败,因此,不相关。重新轮盘赌,同意,错过了这一部分,出于某种原因,我认为时间才是最重要的。这不是无关紧要的,topicstarter或其他读者需要知道如果他们执行此类查询会发生什么。当此查询有效时,只有一个有效的执行选项是消息列具有主键或唯一键。。然后可以使用SQL 1999标准的可选特性,即MySQL 5.7.5+支持的所谓函数依赖性。不,它不起作用。。如果它执行,你就用你的结果集玩俄罗斯轮盘赌。。在启用了sql模式的服务器上,此查询仅\u full\u group\u将出错。对于问题中的原始查询,仅\u full\u group\u by也将失败,因此,不相关。重新轮盘赌,同意,错过了这一部分,出于某种原因,我认为时间才是最重要的。这不是无关紧要的,topicstarter或其他读者需要知道如果他们执行此类查询会发生什么。当此查询有效时,只有一个有效的执行选项是消息列具有主键或唯一键。。然后可以使用MySQL 5.7.5+支持的SQL 1999标准可选特性,称为函数依赖。