聽起來像是你需要KEEP首/末:
select a.smbl,
b.mltpl,
beginning_date,
round(max(aum/1000000.00)) as high_water_aum,
max(high_water_date) keep (dense_rank first order by aum desc) hw_dt_of_max_row
from tbl1 a
inner join tbl2 b on (a.smbl = b.smbl)
where a.smbl = 'X'
group by a.smbl,
b.mltpl,
beginning_date
order by smbl;
的keep (dense_rank first order by aum desc)
位做排序和最高AUM採摘的行(或多個)。 (如果需要,您可以將其重寫爲keep (dense_rank last order by aum)
)。
max(high_water_date)
是否有多個行具有最高的aum值 - 它只是選擇最新的high_water_date來顯示。如果您願意的話,您可以將其更改爲min(high_water_date)
。
這裏說明的原理一個簡單的例子:
with sample_data as (select 1 id, 20 val1 from dual union all
select 2 id, 10 val1 from dual union all
select 3 id, 40 val1 from dual union all
select 4 id, 100 val1 from dual union all
select 5 id, 70 val1 from dual union all
select 6 id, 100 val1 from dual union all
select 7 id, 80 val1 from dual union all
select 8 id, 70 val1 from dual union all
select 9 id, 90 val1 from dual)
select max(val1) max_val1,
max(id) keep (dense_rank first order by val1 desc) max_val1_max_id1,
max(id) keep (dense_rank last order by val1) max_val1_max_id2
from sample_data;
MAX_VAL1 MAX_VAL1_MAX_ID1 MAX_VAL1_MAX_ID2
---------- ---------------- ----------------
100 6 6
什麼是'IN' - >'其中A.SMBL IN ='X''試圖創建別名爲什麼不只是'='?爲什麼'按SMBL排序'如果都是'X'? –
@JuanCarlosOropeza它需要訂購的原因,因爲在我的實際查詢中我使用了多於一個的符號。我只用'x'來確保查詢不顯得擁擠。 – ace123