oracle之分析函数 partition by

--创建临时表 temp
with temp as(
select '设备1' name, to_date('2020-01-01', 'yyyy-mm-dd') time, 26 value from dual union all
select '设备1' name, to_date('2020-01-02', 'yyyy-mm-dd') time, 27 value from dual union all
select '设备1' name, to_date('2020-01-03', 'yyyy-mm-dd') time, 28 value from dual union all

select '设备2' name, to_date('2020-01-01', 'yyyy-mm-dd') time, 29 value from dual union all
select '设备2' name, to_date('2020-01-02', 'yyyy-mm-dd') time, 30 value from dual union all
select '设备2' name, to_date('2020-01-03', 'yyyy-mm-dd') time, 31 value from dual union all

select '设备3' name, to_date('2020-01-01', 'yyyy-mm-dd') time, 32 value from dual union all
select '设备3' name, to_date('2020-01-02', 'yyyy-mm-dd') time, 33 value from dual union all
select '设备3' name, to_date('2020-01-03', 'yyyy-mm-dd') time, 34 value from dual
)
NAMETIMEVALUE
设备1 2020/1/1 26
设备1 2020/1/2 27
设备1 2020/1/3 28
设备2 2020/1/1 29
设备2 2020/1/2 30
设备2 2020/1/3 31
设备3 2020/1/1 32
设备3 2020/1/2 33
设备3 2020/1/3 34

 

 

 

 

 

 

 

 

 

 

 

--使用分析函数 partition by
--获取所有设备的最新一条数据
select name, value, time from (
    select name, value, time,
    row_number() over(partition by name order by time desc) rn
    from temp
) where rn = 1
NAMEVALUETIME
设备1 28 2020/1/3
设备2 31 2020/1/3
设备3 34 2020/1/3

 

posted @ 2021-03-03 10:59  艾葵茵  阅读(266)  评论(0)    收藏  举报