我的查询似乎返回了错误的结果,我不确定原因。我还没有排除SQL实际上正在做其他事情的可能性,然后我期望/希望它做什么,因为我现在还没有使用过SQL。
我在这里发布,因为我有时会为什么会错误地返回错误的结果。
错误在MIN(FIRM.account_recharge.X__INSDATE)(或至少是我注意到的那些)
SELECT
FIRM.customer.CUSTOMER_ID,
FIRM.customer.CORPORATION,
FIRM.customer.CUSTOMER_NAME_PREFIX,
FIRM.customer.CUSTOMER_NAME,
FIRM.account.ACCOUNT_TYPE,
FIRM.account.ACCOUNT_TYPE,
FIRM.customer.LANGUAGE,
FIRM.customer.VALIDATED,
FIRM.account.X__INSDATE,
SUM(FIRM.account_recharge.GROSS_VALUE) SUM_FELTOLTESEK,
MIN(FIRM.account_recharge.X__INSDATE),
INNER JOIN FIRM.account
ON FIRM.customer.CUSTOMER_ID = FIRM.account.CUSTOMER
INNER JOIN FIRM.customer_address
ON FIRM.account.CUSTOMER = FIRM.customer_address.CUSTOMER
INNER JOIN FIRM.account_recharge
ON FIRM.account.ACCOUNT_ID = FIRM.account_recharge.ACCOUNT
GROUP BY FIRM.customer.CUSTOMER_ID,
FIRM.account.X_INSDATE,
FIRM.customer.CORPORATION,
etc,etc
HAVING MIN(FIRM.account_recharge.X__INSDATE) BETWEEN to_date('2014-JAN. -01','YYYY-MON-DD') AND to_date('2014-DEC. -31', 'YYYY-MON-DD');
此代码应返回与我们的客户相关的信息,他们的总帐户'充电' /'补充'支付'抱歉不知道在这里使用什么词。并且他们的第一笔付款/钱在2014年上传到他们的帐户。但有时候,返回值似乎只是忽略了我们的客户第一次付钱,并显示第二或第三个日期。 (我的随机手动检查返回了大约1/10的返回值是错误的。)
我们的客户可以拥有更多与他相关联的账户。我正在使用Oracle SQL开发人员(4.0.0.12),请询问您是否想了解有关此pickle的任何其他内容。
否则它似乎工作得很好,但如果你有任何其他调音技巧,我会很高兴听到它们。
感谢您的帮助!
答案 0 :(得分:3)
在'14 -JAN之间有MIN(FIRM.account_recharge.X_INSDATE)。 -01'和'14 -DEC。 -31'
这绝对不正确。你正在比较日期。因此,您必须使用 TO_DATE 和正确的格式掩码将字符串文字明确转换为日期。
例如,
HAVING MIN(FIRM.account_recharge.X_INSDATE)
BETWEEN to_date('2014-JAN-01','YYYY-MON-DD')
AND to_date('2014-DEC-31', 'YYYY-MON-DD')
另外,请勿使用 YY 来表示年份。您不必再次重新发明 Y2K 错误。始终使用 YYYY 格式一年。否则,如果您坚持使用年度的YY值,则使用RR格式。但是,我坚持认为,一年中总是使用YYYY格式。