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

Откуда:
Сообщений: 2
Добрый день! Прошу помочь со следующей задачей.

Есть таблица с историей транзакций по заказам. Где для каждого заказа описаны все статусы, в которых он побывал и время их наступления (orderId, date_time, state).

Задача: померить время между двумя статусами ('start' и 'end' для простоты), которые возникают при выполнении некой операции.

Делаю следущий SELECT:

+
select  th1.orderId, 
	TO_CHAR(th2.date_time, 'yyyy-mm-dd') start_date, 
        TO_CHAR(th2.date_time, 'hh24:mi:ss') start_time, 
        th1.date_time - th2.date_time req_time 
        from transaction_history th1
inner join (
	select 	orderId, 
		date_time 
		from transaction_history 
		where date_time > '01.01.12' and 
		date_time < '01.02.12' and 
		state = 'start'
	) th2 
on th1.orderId = th2.orderId
where state = 'end'


Все получается здорово, но только до тех пор, пока в заказе данная пара статусов встречается однажды. Не сложно догадаться, что при наличие двух и более вхождений, получается "произведение".

Вопрос: как сделать правильную выборку?

Из хинтов только гарантия того, что у двух статусов, относящихся к одной операции, разница между уникальными ключами id минимальна.
4 июн 12, 12:57    [12661141]     Ответить | Цитировать Сообщить модератору
 Re: Задача по выборке.  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Justaman,

lag/lead.
4 июн 12, 12:59    [12661166]     Ответить | Цитировать Сообщить модератору
 Re: Задача по выборке.  [new]
Justaman
Member

Откуда:
Сообщений: 2
AmKad,

Спасибо, не знал о таких функциях. Скорее всего, смогу решить.
4 июн 12, 13:08    [12661228]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить