2016-02-12 2 views
0

Я использовал следующий запрос для получения ожидаемого результата, но не работал должным образом.Как я могу правильно использовать предложение group by в sql

with f1 as 
(
    select 
     case when f.eventid = 5 then f.timestamps end as starttime, 
     case when f.eventid = 6 then f.timestamps end as endtime, 
     f.instanceidentifier as identifier 
    from 
     frarecord f 
) 
select 
    starttime, endtime, identifier 
from f1 

я получил следующий вывод:

enter image description here

Но выход должен прийти с группой по идентификатору.

Я также попытался использовать предложение group by для идентификатора. Исключение говорит мне, что я собираюсь в начале и в конце времени.

Есть ли решение?

Примечание: Этот вопрос тесно связан с How can I calculate average with condition in sql :)

ответ

2

Попробуйте использовать агрегацию:

with f1 as (
     select (case when f.eventid=5 then f.timestamps end) as starttime, 
      (case when f.eventid=6 then f.timestamps end) as endtime, 
      f.instanceidentifier as identifier 
     from frarecord f 
    ) 
select min(starttime) as starttime, max(endtime) as enddtime, identifier 
from f1 
group by identifier; 
+0

это работает, но у меня есть вопрос. Почему вы используете 'min' и' max', можете ли вы объяснить? – Yubaraj

+0

@Yubaraj. , , Потому что вам нужны функции агрегации для запроса агрегации. –

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