2

私はこの単純なクエリでちょっと迷いました

以下は、日付( SERVICE_DATE)を使用したクエリです。

SELECT DISTINCT JOB_ID,
       SERVICE_DATE,
       GRAND_TOTAL,
       TYPE_INSERT,
       PAYMENT_ID
FROM   TBL_XXX
WHERE  USER_ID = 100
       AND PAYMENT_ID <> 0
ORDER  BY JOB_ID DESC;

そして、私はこの結果を得ました:

467 18/10/2012  16  Upload  527811
467 18/10/2012  16  Upload  527811
466 18/10/2012  4   Key-In  527806
465 18/10/2012  4   Key-In  527804
464 17/10/2012  24  Upload  527784
464 17/10/2012  24  Upload  527784
464 17/10/2012  24  Upload  527784

日付なしのこのクエリ(SERVICE_DATE

SELECT DISTINCT JOB_ID,
       GRAND_TOTAL,
       TYPE_INSERT,
       PAYMENT_ID
FROM   TBL_XXX
WHERE  USER_ID = 100
       AND PAYMENT_ID <> 0
ORDER  BY JOB_ID DESC;

結果:

467 16  Upload  527811
466 4   Key-In  527806
465 4   Key-In  527804
464 24  Upload  527784

ここで何が欠けていますか?

4

3 に答える 3

2

service_dateは時間部分を含む日付ですが、IDEは日付部分のみを表示します。

詳細を確認するには、日付の形式または使用方法についてIDEの設定を変更できます。

SELECT DISTINCT JOB_ID,
       to_char(SERVICE_DATE,'yyyy-mon-dd hh24:mi:ss'),
       GRAND_TOTAL,
...
于 2012-10-22T06:09:44.990 に答える
1

動作する場合はこれを実行してみてください。これはあなたと関係があると思うSERVICE_DATEので、使用するクエリROW_NUMBER()とWindows関数を変更しました。

SELECT  JOB_ID,
        SERVICE_DATE,
        GRAND_TOTAL,
        TYPE_INSERT,
        PAYMENT_ID
FROM
    (
        SELECT JOB_ID,
               SERVICE_DATE,
               GRAND_TOTAL,
               TYPE_INSERT,
               PAYMENT_ID,
               ROW_NUMBER() OVER (PARTITION BY JOB_ID 
                                  ORDER BY SERVICE_DATE DESC) rn
        FROM   TBL_XXX
        WHERE  USER_ID = 100
               AND PAYMENT_ID <> 0
    ) x
WHERE rn = 1
ORDER BY JOB_ID DESC
于 2012-10-22T06:04:53.360 に答える
1

Oracleデータ型には、時、分、秒も含まれ、SQLクライアントには年-月-日の部分のみが表示されます。この違いは奇妙な結果を引き起こします。trunc(service_date)を使用して、日の部分のみを使用し、service_date列のデータ型を保持することができます。

于 2012-10-22T06:12:09.340 に答える