2014-02-12 3 views
0

Попытка получить этот вывод в Oracle 8i:Min Max с идентификаторами - Oracle

column1 |time 
________|_______ 
    ABC | 00:00:01 
    END | 00:00:03 
    123 | 00:00:04 
    END | 00:00:07 
    ABC | 00:00:08 
    END | 00:00:10 

с этим выходом из другого запроса

column1 |time  |ID 
    ________|___________| 
     ABC | 00:00:01 | 1 
     ABC | 00:00:02 | 1 
     ABC | 00:00:03 | 1 
     123 | 00:00:04 | 1 
     123 | 00:00:05 | 1 
     123 | 00:00:06 | 1 
     123 | 00:00:07 | 1 
     ABC | 00:00:08 | 2 
     ABC | 00:00:09 | 2 
     ABC | 00:00:10 | 2 

Этот запрос получает мин и макс без учета ID.

select (case when n.n = 1 then column1 else 'END' end) as column1, 
     (case when n.n = 1 then firsttime else lasttime end) as "time" 
from (select column1, min(time) as firsttime, max(time) as lasttime 
     from t 
     group by column1 
    ) t cross join 
    (select 1 as n from dual union all select 2 from dual) n 
order by column1, n.n; 

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

+2

заменить 'GROUP BY column1' на' GROUP BY column1, id'? –

+0

Я думаю, вы хотите «заказать по t.firsttime, t.column1, n.n', а также сохранить смежные значения вместе? –

ответ

0

Вы должны включить id в логике, как в group by и в order by:

select (case when n.n = 1 then column1 else 'END' end) as column1, 
     (case when n.n = 1 then firsttime else lasttime end) as "time" 
from (select column1, id, min(time) as firsttime, max(time) as lasttime 
     from t 
     group by column1, id 
    ) t cross join 
    (select 1 as n from dual union all select 2 from dual) n 
order by id, column1, n.n; 
+0

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

+0

@Dalek. , , Порядок столбцов в 'group by' не имеет значения. –