Oracle SQL 开发人员(4.0.0.12)

Oracle SQL Developer(4.0.0.12)

第一次在这里发帖,希望一切顺利

我尝试使用 Oracle SQL Developer 进行查询,其中 returns 来自 table 的 customer_ID 以及来自另一个的付款时间。我很确定问题出在我的逻辑流程中(我使用 SQL 已经很长时间了,而且它又回到了学校,所以我有点生疏了)。我想将 ID 列为 DISTINCT 和 ORDER BY 日期 ASCENDING,因此只会显示第一个日期。

然而,返回的 table 在某些情况下包含两次或更多次相同的 ID。我什至在滚动浏览时发现了几次相同的 ID 和相同的日期。

如果您想了解更多请询问!

SELECT DISTINCT
    FIRM.customer.CUSTOMER_ID,
    FIRM.account_recharge.X__INSDATE FELTOLTES
FROM
    FIRM.customer
        INNER JOIN FIRM.account
        ON FIRM.customer.CUSTOMER_ID = FIRM.account.CUSTOMER
            INNER JOIN FIRM.account_recharge
            ON FIRM.account.ACCOUNT_ID = FIRM.account_recharge.ACCOUNT
WHERE
    FIRM.account_recharge.X__INSDATE BETWEEN TO_DATE('14-01-01', 'YY-MM-DD') AND TO_DATE('14-12-31', 'YY-MM-DD')
ORDER
    BY FELTOLTES

SELECT DISTINCT FIRM.customer.CUSTOMER_ID, FIRM.account_recharge.X__INSDATE FELTOLTES

Distinct 同时应用于两个列,这意味着您将从两个列中获得 值集 的不同 ROW列。所以,基本上不同的是指 select 列表中的所有列。

相当于select没有distinct但有group by子句。

意思是,

select distinct a, b....

相当于,

select a, b...group by a, b

如果您想要所需的输出,则 CONCATENATE 列。然后,distict 将处理单个串联的结果集。

你的 select 是这样工作的,因为 CUSTOMER_ID 确实有多个 X__INSDATE,因此结果中的记录将是不同的。如果你只需要第一次约会,那么不要使用 DISTINCTORDER BY,而是尝试 select for MIN(X__INSDATE) 并使用 GROUP BY CUSTOMER_ID.