Oracle分组查询
分组查询,且只取每一组内的一条最新的记录
需求:查询 code 为a,b,c且在有效时间段内的每个code最新的一条记录(code不是主键)
1 | select * from (select code |
- 其中下面代码含义是将时间在有效时间段内(
to_char(sysdate, 'yyyymmdd-hh24:mi:ss') <= validuntilTime
)且code为a,或b,或c(code in('a','b','c')
)的所有记录根据code分组(partition by code
),且组内的顺序是根据时间的逆序排列(order by time desc
)
1 | (select code |
- 上面执行结果是类似下面表格效果
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
就能将每一组内的一条最新的记录查询出来了