繁体   English   中英

返回记录组的max(field)-不,不仅仅是max()

[英]Return max(field) for group of records - no, not just max()

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

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

我在子选择,联接等中尝试了各种max(timestamp)风格,但没有任何乐趣。

基本上是这样的(简化后,键入起来更容易):

 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

这意味着按项目分组,按时间戳排序,但是当然不起作用,因为我需要所有行,并且这会将项目A放在列表的顶部,而不是最近记录的项目。

显然,我缺少解决方案的实质。 GROUP BY不起作用,因为我仍然需要返回所有行,因此某种JOIN似乎很有意义,我只需要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;

注意:您的数据“按分钟排序”。 您的文字说“按最大顺序”。 显然,如果您想要最大值,它只是对此查询的简单修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM