Oracle分组查询

34次阅读

共计 808 个字符,预计需要花费 3 分钟才能阅读完成。

分组查询,且只取每一组内的一条最新的记录
需求:查询 code 为 a,b,c 且在有效时间段内的每个 code 最新的一条记录(code 不是主键)
select * from (select code
col1,
col2,
row_number() over (partition by code order by time desc) rank
from t_order
where type= ‘107’
and to_char(sysdate, ‘yyyymmdd-hh24:mi:ss’) <= validuntilTime
and code in
(‘a’,’b’,’c’)
) where rank = 1
<!– more –>
其中下面代码含义是将时间在有效时间段内(to_char(sysdate, ‘yyyymmdd-hh24:mi:ss’) &lt;= validuntilTime)且 code 为 a,或 b,或 c(code in(‘a’,’b’,’c’))的所有记录根据 code 分组 (partition by code),且组内的顺序是根据时间的逆序排列(order by time desc)
(select code
col1,
col2,
row_number() over (partition by code order by time desc) rank
from t_order
where type= ‘107’
and to_char(sysdate, ‘yyyymmdd-hh24:mi:ss’) &lt;= validuntilTime
and code in
(‘a’,’b’,’c’)
)
上面执行结果是类似下面表格效果

CODE
COL1
COL2
RANK

a
xxx
xxx
1

a
xxx
xxx
2

a
xxx
xxx
3

b
xxx
xxx
1

b
xxx
xxx
2

c
xxx
xxx
1

c
xxx
xxx
2

c
xxx
xxx
3

c
xxx
xxx
4

然后将其作为子查询,在外层套一个 select * from (上面的代码) where rank = 1 就能将每一组内的一条最新的记录查询出来了

正文完
 0