我有下表作为例子:
Job_name RunTime
AR_job1 100
AR_job2 120
AR_job3 130
EP_job1 100
EP_job2 80
作业字段只是文本,运行时是整数值 如何为按JOB的前两个字母分组的那些人选择最大的运行时作业,但是将作业保留在另一列中?
我能够执行以下查询,但后来我不知道该运行时的作业全名是什么
select substr(job_name,0,2) Code, MAX(RunTime)
FROM table1 group by substr(job_name,0,2)
这适用于应在Oracle 10 / 11g中运行的查询 的问候,
答案 0 :(得分:3)
您可以使用row_number()
partition by
作业名称的前两个字符。这样做是为每行添加一个增量数字,前两个字符相同。第一行的行将具有最高的运行时间:
select *
from (
select row_number() over (
partition by substr(job_name,0,2)
order by RunTime desc) as rn
, Job_name
, RunTime
from YourTable
) SubQueryAlias
where rn = 1
答案 1 :(得分:1)
Oracle 11g R2架构设置:
CREATE TABLE t
("JOB_NAME" varchar2(7), "RUNTIME" int)
;
INSERT ALL
INTO t ("JOB_NAME", "RUNTIME")
VALUES ('AR_job1', 100)
INTO t ("JOB_NAME", "RUNTIME")
VALUES ('AR_job2', 120)
INTO t ("JOB_NAME", "RUNTIME")
VALUES ('AR_job3', 130)
INTO t ("JOB_NAME", "RUNTIME")
VALUES ('EP_job1', 100)
INTO t ("JOB_NAME", "RUNTIME")
VALUES ('EP_job2', 80)
SELECT * FROM dual
;
查询1 :
select max(job_name) keep (dense_rank first order by runtime desc) job
, max(runtime) as maxruntime
from t
group by substr(job_name, 1,2)
<强> Results 强>:
| JOB | MAX(RUNTIME) |
--------------------------
| AR_job3 | 130 |
| EP_job1 | 100 |