Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вывод разницы времени  [new]
koDar
Member

Откуда:
Сообщений: 7
Добрый день!
Помогите, пожалуйста, разобраться со следующим вопросом, если он вообще имеет решение.
У меня есть таблица с полем timestamp, в котором фиксируются определенные события.
К примеру, в определенный день (пусть это будет 2012-12-04) первое событие было совершено в 08:30:23, а последнее в 21:28:04.
Такие же события происходят каждый день.
Я не знаю как сделать выборку, чтобы в строчке отображалось:

дата | (промежуток времени м\у первым событием и последним)

к примеру

2012-12-04 | 12:57:41
2012-12-05 | промежуток_за_да_данное_число
2012-12-06 | промежуток_за_да_данное_число
2012-12-07 | промежуток_за_да_данное_число
и т.д.

Окольными путями я пришел к выводу, что без циклов тут не обойтись.
Никто не сталкивался с подобными вопросами?
Имеет ли смысл использовать (max(_Time) - min(_Time)) или надо смотреть в другую сторону?

sql-запросы, которые могут убить человека, я писать еще не умею, к сожалению.
Был бы очень обязан за помощь.
Заранее багодарен.
22 янв 13, 10:29    [13807294]     Ответить | Цитировать Сообщить модератору
 Re: Вывод разницы времени  [new]
Нормально
Guest
koDar
Имеет ли смысл использовать (max(_Time) - min(_Time)) или надо смотреть в другую сторону?

Имеет. В сочетании с group by trunc(_Time).
22 янв 13, 10:39    [13807360]     Ответить | Цитировать Сообщить модератору
 Re: Вывод разницы времени  [new]
Кристобаль Хозевич
Member

Откуда: тутошний
Сообщений: 250
koDar,

С примером входных (в with) и выходных данных было бы легче понять, чего ты хочешь, и упростило бы задачу для желающих помочь...
22 янв 13, 10:39    [13807365]     Ответить | Цитировать Сообщить модератору
 Re: Вывод разницы времени  [new]
-Евгений-
Member

Откуда: Киев
Сообщений: 225
koDar,

если я правильно понял, то так :
select distinct trunc(dt.t) day_,
                to_char(min(t) over(partition by trunc(dt.t)), 'HH24:MI:SS') || ' - ' || -- 
                to_char(max(t) over(partition by trunc(dt.t)), 'HH24:MI:SS') time_
from   (select cast('21-JAN-13 07:39:41' as timestamp) t
        from   dual
        union all
        select cast('21-JAN-2013 10:39:41' as timestamp)
        from   dual
        union all
        select cast('22-JAN-2013 08:39:41' as timestamp)
        from   dual
        union all
        select cast('22-JAN-2013 09:39:41' as timestamp)
        from   dual
        union all
        select cast('22-JAN-2013 11:39:41' as timestamp)
        from   dual
        union all
        select cast('23-JAN-2013 07:39:41' as timestamp) from dual) dt
вариант мой очень корявый, доработайте ;)
22 янв 13, 15:00    [13809802]     Ответить | Цитировать Сообщить модератору
 Re: Вывод разницы времени  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
koDar,

разность двух таймштампов это интервал.
select trunc(ts),max(ts)-min(ts) from ляля group by trunc(ts)

- с точностью до форматирования (- как уж хотите)
22 янв 13, 15:25    [13810098]     Ответить | Цитировать Сообщить модератору
 Re: Вывод разницы времени  [new]
koDar
Member

Откуда:
Сообщений: 7
Добрый день! (или что у вас там).
Огромное спасибо за помощь.
воспольльзовался советом orawish.

вот примерно так получилось:
select  trunc(ts),
to_char((min(ts)), 'yyyy-mm-dd, hh24:mi:ss'), -- эта пара строк просто 
to_char((max(ts)), 'yyyy-mm-dd, hh24:mi:ss'), -- для наглядности
substr((to_char ((max(ts)-min(ts)) )),11, 9)  -- получается нормальный вывод, типа 08:19:27, если не форматировать, то +000000000 23:56:45.000000
to_char ((max(ts)-min(ts)) )
from _Table
where 
ts > TO_DATE ('2012-10-01', 'yyyy-mm-dd')
AND 
ts < TO_DATE ('2012-12-31', 'yyyy-mm-dd')
group by  trunc(ts)
ORDER by 1


Большое спасибо.
23 янв 13, 10:03    [13813506]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить