Oracle 最大时间戳未给出正确的结果

Oracle 最大时间戳未给出正确的结果,oracle,plsql,timestamp,max,Oracle,Plsql,Timestamp,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_n

我有一个基于时间戳显示最新错误消息的简单代码:

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
我的查询提供的是2009年5月8日14:00:04时间戳的输出,而不是2013年8月6日06:55:59的时间戳

3: INVALID (RC4C) E                                                         
3: INVALID (R4CO) EY0                      
你知道我在这方面哪里出错了吗?或者我如何改进我的查询。。如果我删除08-MAY-2009 14:00:04行,它的效果非常好


提前谢谢你的帮助

我认为您的时间戳不是日期或类似的数据类型,而是类似于nvarchar2的字符数据类型。将表更改为正确的数据类型

一个有效但不太干净的解决方案是使用

cast((select max(cast(rqj_timestamp as date)) from reqs) as nvarchar2)
这可能取决于国家语言设置等。 您可以使用列在外部
cast

中的字符数据类型,尝试类似(未测试)的操作:


另外,假设“rqj_timestamp”实际上是一个时间戳(或至少是一个日期)。

感谢您指出检查数据类型。结果是varchar,在_date(rqj_timestamp,'DD-MON-yyyyyy HH24:MI:SS')中添加了

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;