我有这个oracle sql表:
ID | State | Date
x | A | 18-01-01
x | B | 18-01-02
x | C | 18-01-03
y | D | 18-01-04
y | E | 18-01-05
y | F | 18-01-06
z | G | 18-01-07
z | H | 18-01-08
z | I | NULL
我必须编写一个查询,以向我返回ID的最后状态:
ID | State | Date
X | C | 18-01-03
Y | F | 18-01-06
Z | I | NULL
我该怎么办?
谢谢。
答案 0 :(得分:1)
Select id,state,date
FROM
(
select id,
ROW_NUMBER() OVER(partition by id order by date desc) as state,
date
from mytable
)a
WHERE state=1;
答案 1 :(得分:0)
按desc排序日期后使用first_value
select distinct id, first_value(state) over(partition by state order by date desc) as
state,date from tbl
答案 2 :(得分:0)
我只会使用keep
使用聚合:
select id,
max(state) keep (dense_rank first order by date desc) as state,
max(date) as date
from t
group by id;
答案 3 :(得分:0)
最有效的方法是在单个聚合查询中完成所有操作(不需要子查询和分析功能)。
select id
, min(state) keep (dense_rank last order by dt) as state
, max(dt) as dt
from <your_table>
group by id
order by id -- if needed
;
Oracle关键字,例如date
不应用作列名。我将其更改为dt
。