SQL 最大多列数

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 有点不熟悉,所以这是全新的领域。

Gor*_*off 5

你的查询非常接近。不执行以下操作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)

这将按值对分区中的所有内容进行排序。您需要一个最大值,因此按降序排序并取序列中的第一个值。