2013-08-06 42 views
0

我有一個簡單的代碼來顯示基於時間戳最新的錯誤消息:最大時間戳沒有給予正確的結果

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-MAY-2009 14個時00分04秒排,它完美的罰款。

在此先感謝您的幫助。

回答

0

我想assuem你的時間戳不是一個日期或類似的數據類型,但像nvarchar2字符數據類型。將表格更改爲適當的數據類型。

一個工作,但不乾淨的解決辦法是使用類似

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

這可能取決於國家語言設置等 你會使用該列外cast字符數據類型。

0

嘗試像(未經測試):

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

感謝您指出檢查datatype..turns它是varchar,加入to_date(rqj_timestamp,'DD-MON-YYYY HH24:MI:SS')工作。

相關問題