我需要加入4个表来从中提取数据:
| Account Table: A | Plate Table: P | TollTransaction : T | FinTrans Table: F |
=================================================================================
| AccountId | AccountId | AccountId | AcctId |
| AccountNumber | LicPlateNo | LicPlateNo | FinTransTypeCode |
| CurrentBalance | EndDate | EntryTransDt | BusinessDay |
| ActualTagDeposit | | | |
=================================================================================
关系:
A.AccountId = P.AccountId = F.AcctId != T.AccountId <--(NOT EQUAL)
P.LicPlateNo = T.LicPlateNo
我想表明:
A.AccountNumber
A.CurrentBalance
Max(BusinessDay) -->(Last Payment Date)
Max(EntryTransDt) -->(Last Transaction Date)
ActualTagDeposit
WHERE P.EndDate IS NULL
AND A.CurrentBalance > 0
AND F.FinTransTypeCode = 'pymt'
AND Max(EntryTransDt) <= '2017-07-28'
AND A.ActualTagDeposit >= 10
到目前为止我对代码的尝试:
SELECT A.AccountNumber
,A.CurrentBalance
,MAX(F.Last_Pymt_date) AS Last_Pymnt_Date
,MAX(T.Last_Transaction) AS LastTransaction
,A.ActualTagDeposit
FROM
( SELECT AccountId
,LicPlateNo
,MAX(EntryTransDt) AS Last_Transaction
FROM TollTransaction
GROUP BY AccountId, LicPlateNo
) T
INNER JOIN Plate P ON T.LicPlateNo = P.LicPlateNo
INNER JOIN Account A ON P.AccountId = A.AccountId
LEFT JOIN
( SELECT AcctId
,FinTransTypeCode
,MAX(BusinessDay) AS Last_Pymt_Date
FROM FinTransMaster
GROUP BY AcctID, FinTransTypeCode
) F ON A.AccountId = F.AcctId
WHERE P.EndDate is null
AND A.CurrentBalance > 0
AND F.FinTransTypeCode = 'pymt'
AND Last_Transaction <= '2017-07-28'
AND A.ActualTagDeposit >= 10
GROUP BY AccountNumber, CurrentBalance, Last_Pymt_date, Last_Transaction, A.ActualTagDeposit
ORDER BY AccountNumber
但我得到这个代码重复。显然,我的代码中的MAX
部分不能以某种方式工作?
我得到的结果样本:
AccountNumber CurrentBalance Last_Pymnt_Date LastTransaction ActualTagDeposit
21233815 12.34 2016-12-12 2016-08-15 10.00
21233815 12.34 2016-12-12 2017-03-11 10.00
21234567 123.12 2017-06-20 2016-12-25 10.00
21234568 1.23 2017-06-05 2012-07-12 10.00
21234568 1.23 2017-06-05 2012-07-21 10.00
发生这种情况是因为一个帐户可以有多个车牌。如果您将P.LicPlateNo添加到当前选择中,您会看到如下内容:
AccountNumber CurrentBalance Last_Pymnt_Date LastTransaction ActualTagDeposit LicPlateNo
21233815 12.34 2016-12-12 2016-08-15 10.00 A123
21233815 12.34 2016-12-12 2017-03-11 10.00 B456
我想说只是删除Plates
一起,但似乎你必须使用它作为表T
的链接,所以下一个最好的举措是在你的外部查询中做一个MAX()
(你正在做)。问题是你的外部GROUP BY
中也有最大列,这可以防止它们在你的MAX()
中汇总
更改外部组将解决问题:
GROUP BY AccountNumber, CurrentBalance, A.ActualTagDeposit