select*from(select code
col1,
col2,
row_number()over(partitionby code orderbytimedesc) rank
from t_order
wheretype='107'and to_char(sysdate,'yyyymmdd-hh24:mi:ss')<= validuntilTime
and code in('a','b','c'))where rank =1
其中下面代码含义是将时间在有效时间段内(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)
(select code
col1,
col2,
row_number()over(partitionby code orderbytimedesc) rank
from t_order
wheretype='107'and to_char(sysdate,'yyyymmdd-hh24:mi:ss')<= 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就能将每一组内的一条最新的记录查询出来了