2013-08-24 2 views
0

У меня есть таблица, как показано ниже:Oracle SQL Query Помощь нужна для ниже

ID ref num type time stamp 
------------------------------ 
1 456  X  Time 1 
2 456  Y  updated Timestamp 
3 678  X  Time 3 
4 678  Y  updated timestamp 

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

ref num Type Time difference 
------------------------------------ 
456   X (Timestamp diff between Type X and Type Y for a ref num) 
678   Y (Timestamp diff between Type X and Type Y for a ref num) 
+1

Что вы пробовали до сих пор, кроме вопроса здесь? Даже спецификация неясна. Что делать, если refnum 456 обновляется еще больше раз? Вам нужна разница между первым и последним событием? Или просто различия между первым с типом 'X' и последним с типом' Y'? Или наоборот? Пожалуйста, прочитайте [FAQ], и подумайте о том, чтобы сделать себе одолжение, и научиться определять проблемы и задавать вопросы. – ppeterka

+1

результат содержит тип Y для 678 ref_num, но тип X для 456 ref_num. В чем причина Тип в наборе результатов? Как он будет вести себя в другом ref_num? – maks

+0

@ Ramblin'Man: см. Название вопроса. –

ответ

0

Вы можете сделать это с помощью условной агрегации:

select t.refnum, 
     (max(case when type = 'X' then timestamp end) - 
     max(case when type = 'Y' then timestamp end) 
     ) as TypeTimeStampDiff 
from t 
group by t.refnum; 
+0

Спасибо, Гордон за вашу помощь. Я могу получить результаты, как я хотел. – user2713301

0

Одно из решений будет использовать сотрудничество, связанные с суб-запрос, чтобы получить соответствующее значение time_stamp:

select t1.id, 
     t1.ref_num, 
     t1.type, 
     t1.time_stamp - (select max(t2.time_stamp) from the_table t2 where t2.ref_num = t1.ref_num and t2.type = 'Y') as diff 
from the_table t1 
where t1.type = 'X'; 

max() только предварительно осторожность в случае, если есть более чем один ряд с тем же ref_num и type = 'Y'

0

Интересно, но Согласно предоставленной информации, все я понимаю

select t.Ref_Num, 
    (case 
     when Rownum mod 2 = 0 then 
     'Y' 
     else 
     'X' 
    end) type, 
    max(case when type = 'Y' then t.time_stamp end) - 
     min(case when type = 'X' then t.time_stamp end)) as Typetimestampdiff 

from Table_Name t группа по t.Refnum;

Смежные вопросы