Помогите с запросом sql
Как мы можем построить SQL-запрос со следующим ограничением.
Для каждой записи, в которой is_queue_empty=1 и queue_name пустые, немедленно получают следующую запись по метке времени, где is_queue_empty=0 и queue_name могут или не могут быть пустыми для одного и того же идентификатора сеанса и идентификатора запроса.
Таблица имеет следующие столбцы:
session_id, request_id, queue_name, is_queue_empty, timestamp, queue_tag, tab_name.
Что у меня есть dofar это то, что неправильно:
SELECT x.tab_name,
x.is_queue_empty,
x.SESSION_ID,
x.request_ID,
x.TO_CHAR(DATETIME, 'YYYY/MM/DD HH24:MI:SS') timestamp,
y.tab_name,y.queue_name,y.is_queue_empty
FROM queue_data AS x
WHERE
timesttamp < TO_DATE('2011/02/30')
AND timestamp >= TO_DATE('2011/01/01')
AND is_queue_empty=1
AND timestamp < (select TO_CHAR(timestamp, 'YYYY/MM/DD HH24:MI:SS') as timestamp from queue_data as Y where x.session_id = y.session_id and x.request_id=y.request_id and y.is_queue_empty=0 order by y.timestamp asc limit 1 )
1 ответ
Решение
select a.session_id,a.request_id,a.timestamp,a.queue_tag,
b.*
from
(
select session_id,request_id,timestamp,queue_tag,
(select min(b.timestamp)
from tbl b
where a.session_id=b.session_id
and a.request_id=b.request_id
and b.timestamp > a.timestamp
and b.is_queue_empty=0) nextrec
from tbl a
where is_queue_empty=1 and nullif(queue_name,'') is null
) a
left join tbl b on a.session_id=b.session_id
and a.request_id=b.request_id
and a.nextrec = b.timestamp
Замечания:
tbl
это имя таблицы- Предполагая, что отметка времени уникальна в пределах идентификатора session_id,request_id