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

私のクエリは、06-AUG-2013 06:55:59 タイムスタンプではなく、08-MAY-2009 14:00:04 タイムスタンプの出力を提供しています。

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

これでどこが間違っているのか、またはクエリを改善する方法.. 08-MAY-2009 14:00:04 行を削除すると、完全に正常に動作します。

助けてくれてありがとう。

4

3 に答える 3

0

データ型を確認していただきありがとうございます.varcharであることが判明し、追加が機能しto_date(rqj_timestamp,'DD-MON-YYYY HH24:MI:SS') ました。

于 2013-08-07T09:48:33.743 に答える
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」は実際にはタイムスタンプ (または少なくとも日付) であるという前提があります。

于 2013-08-06T13:12:04.010 に答える
0

あなたのタイムスタンプは日付や同様のデータ型ではなく、nvarchar2 のような文字データ型だと思います。テーブルを適切なデータ型に変更します。

機能するがクリーンではない解決策は、次のようなものを使用することです

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

これは、各国語の設定などに依存する可能性があります。列の外側の文字データ型を使用しますcast

于 2013-08-06T13:05:50.463 に答える