У меня есть таблица, в которой перечислены документы, связанные с пациентом. Некоторые документы будут иметь RECEIVED_TIME
, а другие - нет. Мне нужно самое последнее RECEIVED_TIME
, если оно существует.
Я использую функцию row_number
для создания порядкового номера (SEQ
) на основе RECEIVED_TIME
; Я бы ограничил записи до SEQ=1
.
К сожалению, null
значения считаются «более поздними», чем RECEIVED_TIME
, когда мне нужно, чтобы их считали «более ранними».
SQL:
with
data as
(
select v.*
-- sort the most-recent value first
,row_number() over (partition by pat_id order by RECEIVED_TIME desc) SEQ
from (
select 'A' PAT_ID, 100 ID, 'Obtain' STATUS, '2019-04-19 00:00:00' RECEIVED_TIME from dual
union all
select 'A' PAT_ID, 101 ID, 'Unable to Obtained' STATUS, null RECEIVED_TIME from dual
union all
select 'B' PAT_ID, 102 ID, 'Obtained' STATUS, '2019-04-18 00:00:00' RECEIVED_TIME from dual
union all
select 'B' PAT_ID, 103 ID, 'Obtained' STATUS, '2019-04-19 00:00:00' RECEIVED_TIME from dual
union all
select 'C' PAT_ID, 104 ID, 'Unable to Obtained' STATUS, null RECEIVED_TIME from dual
) v
)
select *
from data
Результаты:
PAT_ID,ID,STATUS,RECEIVED_TIME,SEQ
A,101,Unable to Obtained,<NULL>,1 <-- null is 'later'
A,100,Obtain,2019-04-19 00:00:00,2
B,103,Obtained,2019-04-19 00:00:00,1
B,102,Obtained,2019-04-18 00:00:00,2
C,104,Unable to Obtained,<NULL>,1
Желаемые результаты:
PAT_ID,ID,STATUS,RECEIVED_TIME,SEQ
A,100,Obtain,2019-04-19 00:00:00,1
A,101,Unable to Obtained,<NULL>,2 <-- null should be 'earlier'
B,103,Obtained,2019-04-19 00:00:00,1
B,102,Obtained,2019-04-18 00:00:00,2
C,104,Unable to Obtained,<NULL>,1
Есть ли способ достичь этого?