我希望找到一组付款记录,以便我可以将它们组合在一起。例如,对同一客户,账户等的付款,但是在1日和31日之后进行。
我有以下代码。它查找具有相同客户,协议等的记录,并找到要用作更新记录的最小值(AGRMT_PMNT_ID)。
问题在于行eap.PMNT_DAY - eap1.PMNT_DAY> 5不起作用。它总是返回0.如果我注释掉这一行,它会起作用,但会返回错误的结果。
似乎我可以比较选择中的列。 eap.a = eap1.a,但我不能做数学(eap.a - eap1.a> 5)
我做错了什么?
SELECT *
FROM TMP_AGREEMENT_PAYMENTS AS eap
WHERE eap.AGRMT_PMNT_ID =
(
SELECT min(eap1.AGRMT_PMNT_ID) AS expr
FROM TMP_AGREEMENT_PAYMENTS AS eap1
WHERE
eap.CUSTOMER_ID = eap1.CUSTOMER_ID AND
eap.AGREEMENT_ID = eap1.AGREEMENT_ID AND
eap.TXN_CODE = eap1.TXN_CODE AND
eap.TXN_CORR_ACCOUNT = eap1.TXN_CORR_ACCOUNT AND
eap.PMNT_DAY - eap1.PMNT_DAY > 5 -- THIS LINE DOESN'T WORK
)
以下是一些示例数据。
AGRMT_PMNT_ID 442530 442531
CUSTOMER_ID 382100000000000063131 382100000000000063131
AGREEMENT_ID 38210000000010251257 38210000000010251257
PMNT_DAY 3 31
PMNT_DAY1 34 0
PMNT_AMOUNT 597.37 597.37
您可以看到AGRMT_PMNT_ID 442530和442531是针对同一客户,协议等的。在第3天和第31天支付了597.37的金额。目的是将这两个记录数据组合在一起。
问题是代码 eap.PMNT_DAY - eap1.PMNT_DAY> 5 检查记录442531中记录442530减去pmnt_day的pmnt_day是否超过5,即。他们相隔超过5天。
在选择中我可以比较来自不同记录的列,例如。 eap.CUSTOMER_ID = eap1.CUSTOMER_ID,
但我不能在计算中使用这些列 eap.PMNT_DAY - eap1.PMNT_DAY> 5
我认为这只是我的愚蠢,但我错过了什么?
更新
以下代码符合我的要求。感谢您的所有意见。
SELECT *
FROM TMP_AGREEMENT_PAYMENTS AS eap
WHERE eap.AGRMT_PMNT_ID IN
(
SELECT min(eap1.AGRMT_PMNT_ID) AS expr
FROM TMP_AGREEMENT_PAYMENTS AS eap1,
TMP_AGREEMENT_PAYMENTS AS eap2
WHERE
eap2.CUSTOMER_ID = eap1.CUSTOMER_ID AND
eap2.AGREEMENT_ID = eap1.AGREEMENT_ID AND
eap2.TXN_CODE = eap1.TXN_CODE AND
eap2.TXN_CORR_ACCOUNT = eap1.TXN_CORR_ACCOUNT AND
eap2.PMNT_DAY - eap1.PMNT_DAY > 5
GROUP BY eap1.CUSTOMER_ID, eap1.AGREEMENT_ID,
eap1.TXN_CODE, eap1.TXN_CORR_ACCOUNT
)
答案 0 :(得分:0)
是的,评论上的SLin是对的。
DATEDIFF (day, eap1.PMNT_DAY, eap.PMNT_DAY) > 5
如果它只是整数,您可能想尝试在计算周围添加括号。
答案 1 :(得分:0)
此查询是否能满足您的需求?
SELECT *
FROM TMP_AGREEMENT_PAYMENTS eap
INNER JOIN TMP_AGREEMENT_PAYMENTS eap1 ON eap.CUSTOMER_ID = eap1.CUSTOMER_ID
AND eap.AGREEMENT_ID = eap1.AGREEMENT_ID
AND eap.TXN_CODE = eap1.TXN_CODE
AND eap.TXN_CORR_ACCOUNT = eap1.TXN_CORR_ACCOUNT
AND (eap.PMNT_DAY - eap1.PMNT_DAY) > 5