DB2 SQL Query для определения того, какое событие произошло до определенного события в последовательности - PullRequest
1 голос
/ 09 января 2012

У меня есть таблица из нашего IVR, которая содержит уникальный идентификатор вызова, порядковый номер, код события и описание события. Я хотел бы написать запрос, который позволит мне узнать, что было событием до определенного события .

Ответы [ 3 ]

1 голос
/ 09 января 2012

Предполагая, что все, что у вас есть, это "уникальный идентификатор вызова" конкретного события:

SELECT *
FROM tbl
WHERE sequence_number = (
    SELECT MAX(sequence_number)
    FROM tbl
    WHERE sequence_number = (
        SELECT sequence_number FROM tbl WHERE unique_id = PARTICULAR_EVENT_UNIQUE_ID
    )
);

Если известен порядковый номер конкретного события (вместо или в дополнение к уникальному идентификатору вызова), то наиболее внутреннее выделение может быть полностью заменено этим значением.

0 голосов
/ 10 января 2012

В зависимости от того, какие индексы существуют в таблице, прямое внутреннее объединение может получить более эффективный план доступа от оптимизатора запросов.

SELECT n.call_id, 
    n.event_dt, 
    n.sequence_number, 
    p.call_id as prior_call_id, 
    p.event_id as prior_event_id,
    p.event_dt as prior_event_dt,
    p.sequence_number as prior_sequence_number
FROM daily_events n
INNER JOIN daily_events p
    ON p.sequence_number = n.sequence_number - 1
WHERE n.event_id = '5047'
AND n.event_dt >= DATE( '01/06/2012' ) 
AND n.event_dt <= DATE( '01/07/2012' );

Запрос предполагает, что любое событие с порядковым номером, отличающимся на единицу, является подходящим совпадением, и что call_id также не должен совпадать. Если это предположение неверно, затем добавьте AND n.call_id = p.call_id к предложению ON объединения.

0 голосов
/ 09 января 2012

Предполагая, что порядковый номер является последовательным (т. Е. Следующая запись всегда имеет порядковый номер 1 больше текущей записи), попробуйте:

select i.* 
from ivr_table i
where exists
(select 1
 from ivr_table ni
 where i.sequence + 1 = ni.sequence and ni.event_code = '5047')

РЕДАКТИРОВАТЬ: select null в подзапросе заменено на select 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...