2013-08-06 3 views
0

У меня есть простой код для отображения последней Сообщ ошибок на основе временной метки:Max Отметка не дает правильный результат

SELECT 
      line_item || ': ' || error_msg as RejectionMsg 
      FROM reqs 
      WHERE reqs_number = 'XXXXXXX' 
      and rqj_timestamp = (select max(rqj_timestamp) from reqs 
      WHERE reqs_number = 'XXXXXX') 

Мои данные что-то вроде:

rqj_timestamp   line_item Error_msg 
08-MAY-2009 14:00:04 8928 INVALID (RC4C) E 
08-MAY-2009 14:00:04 8929 INVALID (R4CO) EY0 
05-AUG-2013 00:13:42 11760 OO_USR_1 - NO_DATA_FOUND:No Data found for REQUEST 
05-AUG-2013 00:13:42 11761 OO_USR_1 - NO_DATA_FOUND:No Data found for REQUEST 
05-AUG-2013 00:13:42 11762 OO_USR_1 - NO_DATA_FOUND:No Data found for REQUEST 
05-AUG-2013 00:14:59 11763 OO_USR_1 - NO_DATA_FOUND:No Data found for REQUEST 
06-AUG-2013 06:55:59 11807 OO_45_ERROR_REGION_DERIV 
06-AUG-2013 06:55:59 11808 OO_45_ERROR_REGION_DERIV 
06-AUG-2013 06:55:59 11809 OO_45_ERROR_REGION_DERIV 

Мой запрос дает мне выход для 08-MAY-2009 14:00:04, временная печать, а не 06-AUG-2013 06:55:59.

3: INVALID (RC4C) E               
3: INVALID (R4CO) EY0      

Любая идея, где я неправильно в этом? Или как я могу улучшить мой запрос .. если я удалить 08-май-2009 14:00:04 строки, он отлично работает.

Заранее благодарим за помощь.

ответ

0

Я бы хотел, чтобы ваша метка не была датой или аналогичным типом данных, а символьным типом данных, например nvarchar2. Измените таблицу на соответствующий тип данных.

рабочие, но менее чистое решение было бы использовать что-то вроде

cast((select max(cast(rqj_timestamp as date)) from reqs) as nvarchar2) 

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

0

Try что-то вроде (непроверенные):

select * 
from (
    select r.*, 
    row_number() over (partition by reqs_number order by rqj_timestamp desc nulls last) rnum 
    from reqs r 
    where reqs_number = 'XXXXXXX' 
) 
where rnum = 1; 

Кроме того, предположение является "rqj_timestamp" на самом деле временная метка (или, по крайней мере, дата).

0

Благодарим за указание на тип данных .. из него был varchar, добавив to_date(rqj_timestamp,'DD-MON-YYYY HH24:MI:SS').