当前位置: 代码迷 >> Oracle开发 >> 怎么求当前记录之前的最大值、之后的最小值
  详细解决方案

怎么求当前记录之前的最大值、之后的最小值

热度:99   发布时间:2016-04-24 06:29:53.0
如何求当前记录之前的最大值、之后的最小值?
表:
id data
1 1000
2 2000
3 1500
4 800
5 3000
6 4000

希望得到的结果集:
id data p_data n_data
1 1000 1000 800
2 2000 2000 800
3 1500 2000 800
4 800         2000 800
5 3000 3000 3000
6 4000 4000 4000

结果集中新增字段p_data其值为当前记录前(包括当前记录)所有data中的最大值;n_data为当前记录后(包括当前记录)所有data的最小值。求教oracle写法!
------解决思路----------------------
WITH T1 as (
select id,data,max(data)over(order by id) p_data
from T
),T2 as (
select id,min(data)over(order by id desc) n_data
from T
)
select T1.ID,T1.DATA,T1.P_DATA,T2.N_DATA
from T1,T2
WHERE T1.ID=T2.ID

------解决思路----------------------
SELECT ID,DATA,LAG(P_DATA)OVER(ORDER BY ID) p_data
FROM (
    select id,data,max(data)over(order by id) p_data
    from T
)
  相关解决方案