从表中获取两个最大值

时间:2018-04-18 17:09:08

标签: sql oracle oracle11g

我正忙着努力达到理想的效果。这是我的桌子。

item    loc price   START_DATE  CALC_DATE
item1   1243    1,16    18.04.16    18.04.13
item1   1243    1,20    18.02.20    18.02.19
item1   1243    1,20    18.02.17    18.02.16
item1   1243    1,20    18.02.15    18.02.14
item1   1243    1,18    18.01.10    18.01.09
item2   1243    2,23    18.03.20    18.03.19
item2   1243    2,77    18.02.27    18.02.26
item2   1243    2,42    18.01.24    18.01.23
item2   1243    3,21    18.01.05    18.01.04
item2   1243    2,77    18.01.04    18.01.03

这是欲望的输出。

item    WH  actual price    old price
item1   1243    1,16    1,2
item2   1243    2,23    2,77

我可以通过max(STAR_DATE)和max(CALC_DATE)获得“实际价格”,但是无法获得第二个最大日期。 有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这应该适合你:

select item, loc, max(case when rownum=1 then price else null end) actual_price, 
max(case when rownum=2 then price else null end) old_price
from
(select *,  row_number() over(partition by item, loc order by start_date desc) rownum
from yourtable)a
group by item, loc