Chr*_*tti 1 sql oracle max multiple-columns
我正在尝试显示特定值的最大值以及该值的相应时间戳。我的命令正常工作,但不幸的是,如果该值在超过一个时间段内处于最大值,它会显示所有时间戳。对于多个目标来说这也可能很麻烦。这是我现在正在使用的:
select target_name,value,collection_timestamp
from (select target_name,value,collection_timestamp,
max(value) over (partition by target_name) max_value
from mgmt$metric_details
where target_type='host' and metric_name='TotalDiskUsage'
and column_label='Total Disk Utilized (%) (across all local filesystems)'
)
where value=max_value;
Run Code Online (Sandbox Code Playgroud)
我想使用相同类型的命令(尝试避免内部连接等,因为缺乏带宽)......但每个 target_name 只显示 1 个最大值/时间戳。有没有办法在不破坏它的情况下协调 group by 或 limit 函数?我对 SQL 有点不熟悉,所以这是全新的领域。
你的查询非常接近。不执行以下操作max,而是执行以下操作row_number():
select target_name,value,collection_timestamp
from (select target_name,value,collection_timestamp,
row_number() over (partition by target_name order by value desc) as seqnum
from mgmt$metric_details
where target_type='host' and metric_name='TotalDiskUsage'
and column_label='Total Disk Utilized (%) (across all local filesystems)'
)
where seqnum = 1
Run Code Online (Sandbox Code Playgroud)
这将按值对分区中的所有内容进行排序。您需要一个最大值,因此按降序排序并取序列中的第一个值。