Ищите указанные значения в поле, но не показывайте никаких записей, где последняя запись в этом поле равна '1100' - PullRequest
0 голосов
/ 01 ноября 2019

То, что я пытаюсь сделать, - это найти все записи, где запрос в какой-то момент его жизни мог иметь код состояния «EN13» или «EN93» - однако, проблема в том, что я должен пропуститьвсе записи из отчета, где окончательный код состояния в запросе равен «1100» - даже если в истории этого запроса присутствуют «EN13» или «EN93».

Код, который я получил до сих пор

1004 *

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы можете использовать LAST_VALUE или FIRST_VALUE, чтобы получить последний статус:

select *
from
 (
    select
    central_enquiry.enquiry_number,
    central_enquiry.enquiry_time,
    central_enquiry.service_code,
    enquiry_status_log.enq_status_code,
    central_enquiry.enquiry_desc,
    central_enquiry.outstanding_flag,

    -- latest status per enquiry_number
    first_value(enquiry_status_log.enq_status_code)
    over (partition by enquiry_status_log.enquiry_number
          order by central_enquiry.enquiry_time desc) as last_status

    from
    central_enquiry
    inner join enquiry_status_log on central_enquiry.enquiry_number = 
    enquiry_status_log.enquiry_number

    where
    central_enquiry.service_code = 'GABV' and

    ((central_enquiry.enquiry_time > ADD_MONTHS(SYSDATE,-1) AND
    central_enquiry.enquiry_time < SYSDATE)) 
 ) dt
where enq_status_code in ('EN13', 'EN93')
  and last_status <> '1100'
order by enquiry_number
0 голосов
/ 01 ноября 2019

Поскольку моя версия Oracle SQL не позволяла использовать Select * ниже, это код, который использовался для его работы.

Благодаря Dnoeth.

select
dt.enquiry_number,
dt.enquiry_time,
dt.service_code,
dt.enq_status_code,
dt.enquiry_desc,
dt.outstanding_flag,

-- latest status per enquiry_number
first_value(dt.enq_status_code)
over (partition by dt.enquiry_number
      order by dt.enquiry_time desc) as last_status

from
(
select
central_enquiry.enquiry_number,
central_enquiry.enquiry_time,
central_enquiry.service_code,
enquiry_status_log.enq_status_code,
central_enquiry.enquiry_desc,
central_enquiry.outstanding_flag,

-- latest status per enquiry_number
first_value(enquiry_status_log.enq_status_code)
over (partition by enquiry_status_log.enquiry_number
      order by central_enquiry.enquiry_time desc) as last_status

from
central_enquiry
inner join enquiry_status_log on central_enquiry.enquiry_number = 
enquiry_status_log.enquiry_number

where
central_enquiry.service_code = 'GABV' and

((central_enquiry.enquiry_time > ADD_MONTHS(SYSDATE,-1) AND
central_enquiry.enquiry_time < SYSDATE)) 
) dt

where enq_status_code in ('EN13', 'EN93')
and last_status <> '1100'
order by enquiry_number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...