我有一个记录字段数据集合的表,每个数据片段作为一个单独的行(例如,项目的长度和宽度都是表格中的一行)。
我想显示按最新日志条目的时间戳排序的日志结果,按项目分组。
我在子选择,连接等中尝试了各种各样的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来学习如何构造它。
答案 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,它只是对这个查询的一个简单修改。