Mysql 返回记录组的最大值(字段)-否,而不仅仅是最大值()

Mysql 返回记录组的最大值(字段)-否,而不仅仅是最大值(),mysql,sql,select,group-by,Mysql,Sql,Select,Group By,我有一个记录字段数据收集的表,其中组中的每个数据段都作为一个单独的行(例如,一个项目的长度和宽度都是表中的一行) 我想显示按最新日志条目的时间戳排序的日志结果,并按项目分组 我尝试了不同口味的max(时间戳)在子选择,加入等,但没有乐趣 基本上是这样的(简化了,因此更容易键入): 我希望我的结果集排序如下: G | 1000 | yellow G | 1003 | green D | 1001 | blue D

我有一个记录字段数据收集的表,其中组中的每个数据段都作为一个单独的行(例如,一个项目的长度和宽度都是表中的一行)

我想显示按最新日志条目的时间戳排序的日志结果,并按项目分组

我尝试了不同口味的max(时间戳)在子选择,加入等,但没有乐趣

基本上是这样的(简化了,因此更容易键入):

我希望我的结果集排序如下:

  G    |    1000     | yellow
  G    |    1003     |  green
  D    |    1001     |   blue
  D    |    1004     |  pickle
  C    |    1002     |   red
  Z    |    1005     |  trotsky
这意味着按项目分组,按时间戳排序,但这当然不起作用,因为我需要所有行,这会将项目A放在列表的顶部,而不是最近记录的项目


很明显,我错过了真正的解决方案。GROUP BY不起作用,因为我仍然需要返回所有的行,因此某种类型的联接似乎是有意义的,我只需要oracle来学习如何构造它。

看起来您希望按每个项目的时间戳的最小值对项目进行排序。试试这个:

select l.*
from logs l join
     (select item, min(timestamp) as mints
      from logs
      group by item
     ) i
     on l.item = i.item
order by i.mints, l.item, l.timestamp;

请注意:您的数据高呼“按分钟排序”。你的文字上写着“按最大值排序”。显然,如果您想要最大值,这只是对该查询的简单修改。

您能为您的问题做好准备吗?太好了!感谢SO的专家们!
select l.*
from logs l join
     (select item, min(timestamp) as mints
      from logs
      group by item
     ) i
     on l.item = i.item
order by i.mints, l.item, l.timestamp;