[英]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.