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

时间:2014-11-01 15:17:29

标签: mysql sql select group-by

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

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

我在子选择,连接等中尝试了各种各样的max(时间戳),但没有快乐。

基本上,像这样(简化以便更容易输入):

 item  |  timestamp  |  data
  G    |    1000     | yellow
  D    |    1001     |  blue
  C    |    1002     |   red
  G    |    1003     |  green
  D    |    1004     |  pickle
  Z    |    1005     | trotsky

我希望我的结果集类似于:

  G    |    1000     | yellow
  G    |    1003     |  green
  D    |    1001     |   blue
  D    |    1004     |  pickle
  C    |    1002     |   red
  Z    |    1005     |  trotsky

这意味着Group By项目,Order By timestamp,但当然不起作用,因为我需要所有行,这会将项目A放在列表的顶部,而不是最近记录的项目。

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

1 个答案:

答案 0 :(得分:2)

看起来您想要按每个项目的时间戳的最小值来订购项目。试试这个:

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;

作为注释:您的数据尖叫“按分钟排序”。你的文字说“按最大顺序”。显然,如果你想要max,它只是对这个查询的一个简单修改。