Oracle:从两个字段中获取最高值(日期,然后是值)
我有这样的东西(日期简化为整数,仅作为示例): 我想得到日期最高的订单,然后是价值最高的订单:Oracle:从两个字段中获取最高值(日期,然后是值),oracle,oracle11g,top-n,Oracle,Oracle11g,Top N,我有这样的东西(日期简化为整数,仅作为示例): 我想得到日期最高的订单,然后是价值最高的订单: Order Date Value 12 5 800 13 4 155 14 1 121 ... ... ... 我知道这与其他几个问题类似,但我不知道如何将这些答案应用到我的案例中,对不起 谢谢 使用分析函数 使用分析函数 假设您的表名为orders 在子查询中,您可以找到具有最高日期的订单,以及找到值最高的订单。。。它将如下所示: select or
Order Date Value
12 5 800
13 4 155
14 1 121
... ... ...
我知道这与其他几个问题类似,但我不知道如何将这些答案应用到我的案例中,对不起
谢谢 使用分析函数使用分析函数
假设您的表名为
orders
在子查询中,您可以找到具有最高日期的订单
,以及找到值最高的订单
。。。它将如下所示:
select order,date,max(value) value from orders
where (order,date) in
(select order, max(date) date
from orders
group by order
)
group by order,date
order by order,date desc
假设您的表名为orders
在子查询中,您可以找到具有最高日期的订单
,以及找到值最高的订单
。。。它将如下所示:
select order,date,max(value) value from orders
where (order,date) in
(select order, max(date) date
from orders
group by order
)
group by order,date
order by order,date desc
您可以使用分析第一/最后一个函数(请参阅Oracle文档)。此解决方案不需要子查询/外部查询安排。我更改了列名,因为至少ORDER和DATE是Oracle关键字
with
inputs ( ord, dt, val ) as (
select 12, 5, 555 from dual union all
select 12, 5, 800 from dual union all
select 12, 2, 900 from dual union all
select 13, 3, 122 from dual union all
select 13, 4, 155 from dual union all
select 14, 1, 121 from dual
)
-- End of test data (not part of the solution).
-- SQL query begins BELOW THIS LINE
select ord, max(dt) as dt, max(val) keep (dense_rank last order by dt) as val
from inputs
group by ord
;
ORD DT VAL
--- -- ---
12 5 800
13 4 155
14 1 121
您可以使用分析第一/最后一个函数(请参阅Oracle文档)。此解决方案不需要子查询/外部查询安排。我更改了列名,因为至少ORDER和DATE是Oracle关键字
with
inputs ( ord, dt, val ) as (
select 12, 5, 555 from dual union all
select 12, 5, 800 from dual union all
select 12, 2, 900 from dual union all
select 13, 3, 122 from dual union all
select 13, 4, 155 from dual union all
select 14, 1, 121 from dual
)
-- End of test data (not part of the solution).
-- SQL query begins BELOW THIS LINE
select ord, max(dt) as dt, max(val) keep (dense_rank last order by dt) as val
from inputs
group by ord
;
ORD DT VAL
--- -- ---
12 5 800
13 4 155
14 1 121
使用orderbydatedesc,value desc
@Seyran谢谢,非常简单。但是我怎么才能得到每个订单的“最高值”呢?如果我理解你的意思是正确的,那么你希望行的Order
值,其中`date value`最高,应该是这样的,select*from(…你的select Order by date desc,value desc),其中rownum=1
@Seyran几乎在那里。我需要得到每个订单的最新日期和之后的最高值。rownum=1应该以某种方式应用于订单级别。如果您在date
和value
中有两个值相同的记录,并且它们是最高的,但是Order
是不同的,那么可能吗?使用Order by date desc,value desc
@Seyran谢谢,非常简单。但是我怎么才能得到每个订单的“最高值”呢?如果我理解你的意思是正确的,那么你希望行的Order
值,其中`date value`最高,应该是这样的,select*from(…你的select Order by date desc,value desc),其中rownum=1
@Seyran几乎在那里。我需要得到每个订单的最新日期和之后的最高值。rownum=1应该以某种方式应用于订单级别。如果在date
和value
中有两个值相同的记录,它们是最高的,但Order
是不同的,可能吗?很好的方法。。。值得一看。。。我投赞成票;-)好办法。。。值得一看。。。我投赞成票;-)