不幸的是,SQL并不是很容易找到我。我有两个表,一个Loan表和一个LoanPayments表。
Loan
LoanPayments
贷款支付表:
ID(主键),LoanID(与贷款表上的ID匹配),PaymentDate,Amount等。
我需要一条sql语句,该语句可以给我每个月输入的最后一笔付款(如果有的话)。我目前的说法没有给我结果。还存在一个问题,有时在该月的最大日期有时会有平局,因此我也必须能够处理该问题(我的想法是在平局的情况下选择最大的ID)。
这是我到目前为止所拥有的(我知道这是错误的,但我不知道为什么。):
SELECT lp.ID, lp.LoanID, lp.PaymentDate FROM LoanPayments lp WHERE lp.PaymentDate in ( SELECT DISTINCT MAX(PaymentDate) as PaymentDate FROM LoanPayments WHERE IsDeleted = 0 AND ReturnDate is null GROUP BY YEAR(PaymentDate), Month(PaymentDate) ) AND CAST(PaymentDate as date) >= CAST(DATEADD(mm, -24, GETDATE()) as date)
最后一部分只是对其进行过滤,因此我只能得到最近24个月的付款。感谢您的帮助,并感谢您抽出宝贵的时间来帮助我解决此问题。
您可以在此处使用ROW_NUMBER()函数:
SELECT * FROM (SELECT lp.ID, lp.LoanID, lp.PaymentDate , ROW_NUMBER() OVER (PARTITION BY YEAR(PaymentDate), Month(PaymentDate) ORDER BY PaymentDate DESC) 'RowRank' FROM LoanPayments lp )sub WHERE RowRank = 1
那只是每个月的最新PaymentDate,如果您希望通过LoanID进行付款,则可以将LoanID添加到PARTITION BY列表中。如果您对保持联系感兴趣,可以使用RANK()代替ROW_NUMBER()
PARTITION BY
RANK()
ROW_NUMBER()