小编典典

获取每个月的最新记录

sql

不幸的是,SQL并不是很容易找到我。我有两个表,一个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个月的付款。感谢您的帮助,并感谢您抽出宝贵的时间来帮助我解决此问题。


阅读 173

收藏
2021-04-14

共1个答案

小编典典

您可以在此处使用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()

2021-04-14