Mysql 按帮助顺序分组

Mysql 按帮助顺序分组,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,下面的代码可以工作,但我希望组按日期时间显示其最新查询,而不是第一个日期时间查询。我试着从ASC/DESC更改顺序,但这只是更改所有组的顺序,而不是组中的数据。我需要所有组的内部数据和所有组的最新日期时间订购 $query="SELECT * FROM emails WHERE sentto='$sid' GROUP BY sentto ORDER BY datetime DESC LIMIT $eu, $limit "; 而不是显示组并按

下面的代码可以工作,但我希望组按日期时间显示其最新查询,而不是第一个日期时间查询。我试着从ASC/DESC更改顺序,但这只是更改所有组的顺序,而不是组中的数据。我需要所有组的内部数据和所有组的最新日期时间订购

$query="SELECT * FROM emails 
        WHERE sentto='$sid' 
        GROUP BY sentto 
        ORDER BY datetime DESC LIMIT $eu, $limit ";
而不是显示组并按第一个查询对其排序:
Sam Richards于2011年1月22日发出的信息(这是一个团体)
约翰·史密斯于2011年1月5日的致辞(这是一个小组)

我想让它显示组并按最新查询排序:
约翰·史密斯于2011年4月19日发出的信息(这是一个团体)
Sam Richards于2011年3月10日发表的信息(这是一个小组)


请提供帮助。

要对组中的数据进行排序,您需要在
ORDER BY
子句中包含sentto

试试这个:

SELECT * FROM emails 
            WHERE sentto='$sid' 
            GROUP BY sentto 
            ORDER BY sentto, datetime DESC LIMIT $eu, $limit 
那么:

ORDER BY sentto ASC, datetime DESC

我认为您的问题的一部分是您正在使用GROUPBY查询选择非聚合列。您应该明确表示希望它在聚合查询结果中返回哪些值

SELECT sentto, MAX(datetime) AS datetime FROM emails
  GROUP BY sentto
  ORDER BY datetime desc LIMIT $eu, $limit;
我仍然不确定这是否能满足你的需求。听起来你想实际检索每封邮件的行,只需最大限度地使用分组进行排序。要做到这一点,您可能需要执行上述查询,然后返回并对每个sentto执行第二次查询。我想不出一个简单的查询方法

SELECT * FROM emails
  WHERE sentto=$sid
  ORDER BY datetime DESC;

(对于第一次查询中返回的每个sentto。)

仍然没有显示组main的最新datetime消息。仍然不起作用。它对组进行排序,但仍将组的第一项显示为最早的消息。是的,重新阅读时,我不完全确定我是否了解您所拥有的数据行与所需输出的比较情况(您提到查看组的内部数据,但group by的目的是将满足该条件的所有行“折叠”为一行,因此除了使用聚合函数(如MAX或SUM)外,您无法查看内部数据).我认为Brian的答案看起来更适合满足您的需要。但仍然不起作用。它对组进行排序,但仍然显示组中的第一项作为最早的消息。这几乎起作用了。我正在努力解决这个问题。我几乎用一个查询就搞定了。