首页 > 解决方案 > SQL 查询组并获取最新状态

问题描述

我有这个 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

我能怎么做 ?

谢谢。

标签: sqloraclegroup-by

解决方案


使用ROW_NUMBER()

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;

推荐阅读