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 回答