2013-04-27 3 views
2

У меня есть следующая таблица в качестве примера:получить максимальное значение для каждой группы имен

Job_name RunTime 
AR_job1  100 
AR_job2  120 
AR_job3  130 
EP_job1  100 
EP_job2  80 

поля Работы является только текстом и выполнение представляет собой целое значение Как выбрать самую большую работу во время выполнения для тех, сгруппированных по двум первым буквам задания, но сохранить работу и в другой колонке?

Я был в состоянии сделать следующий запрос, но я понятия не имею, Что работа полное имя для этого выполнения

select substr(job_name,0,2) Code, MAX(RunTime) 
FROM table1 group by substr(job_name,0,2) 

Это для запроса, который должен выполняться в Oracle 10/11g С уважением,

ответ

3

Вы можете использовать row_number() для partition by первые два символа имени работы. То, что это делает, это передать инкрементное число каждой строке с теми же первыми двумя символами. Строка с номером один будет иметь наивысший Runtime:

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 
+0

Спасибо большое, это, кажется, работает отлично! – Smoke

1

SQL Fiddle

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 
; 

Query 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 | 
+0

Yey, это хорошо выглядит, но как добавить фактическое время выполнения этих заданий? Мне также нужно знать эту ценность, среди кода (я могу добавить другое поле с substr (имя_задания, 0,2) как Код – Smoke

+0

+1 Не знал о 'keep'. Я отредактировал ваш запрос, чтобы добавить максимальное время выполнения, по просьбе Smoke, надеюсь, что все в порядке. – Andomar

+0

@Andomar не проблема;) –