在 SQL 中获取用户的最后一笔付款

Posted

技术标签:

【中文标题】在 SQL 中获取用户的最后一笔付款【英文标题】:Get Last Payment From A User in SQL 【发布时间】:2018-05-15 16:11:35 【问题描述】:

我有这张桌子

我试图从最后一个交易日期获得本金 + 利息的总和。 第 4 列。是最后一次执行的交易 - [No column name] 是交易日期

到目前为止我所尝试的:

select sum(h.principal+h.interest) as amt_paid, MAX(h.trx_date)
from Loanhist h WHERE h.ac_no = '$id' and h.trx_type='LP'
GROUP BY principal, interest

【问题讨论】:

你能详细说明你在寻找什么吗?因为在这里您正在使用聚合函数并将它们分组。因此,数据库不会返回最后一个事务。我们需要编写一个不同的查询。如果您只想获得最后一笔交易,那么我们可以进行查询。 @Rohit.007,我已经编辑了我的问题。谢谢。 【参考方案1】:

测试数据生成是针对 Oracle 的,但您应该能够轻松适应它。实际查询将在 SQL Server 上运行。如果帐户可以在一天内发布多笔交易,您将需要使用这样的方法。否则,其他答案中的 'LIMIT/TOP 1' 方法将正常工作。

CREATE GLOBAL TEMPORARY TABLE balances 
  ( ac_no CHAR(100),
    principal FLOAT,
    interest FLOAT,
    tranDate DATE
  )
ON COMMIT PRESERVE ROWS;

INSERT INTO balances VALUES (1,123.123,.456,DATE '2017-01-01');
INSERT INTO balances VALUES (1,100,.456,DATE '2017-01-02');
INSERT INTO balances VALUES (1,200,.1,DATE '2017-01-02');
INSERT INTO balances VALUES (2,200,.1,DATE '2017-01-02');
INSERT INTO balances VALUES (2,300,.1,DATE '2017-01-02');

SELECT SUM
         ( CASE WHEN tranDate = max_tran_date
                THEN principal + interest
                ELSE 0
            END
         ) AS tranSum
  FROM (SELECT sub.*,
               MAX(tranDate) OVER() AS max_tran_date
          FROM balances sub
       ) BAL;

【讨论】:

【参考方案2】:

你的问题不是很清楚。但是,如果您只想获取用户执行的最后一笔交易,最好的办法是依赖 ID 而不是日期。

SELECT TOP 1 * FROM Loanhist h WHERE h.trx_type='LP' ORDER BY h.ac_no DESC

【讨论】:

我想你会想按 trx_date 而不是 ac_no 订购。 :)【参考方案3】:

尝试使用 LIMIT 关键字。例如,Select * from table name where condition LIMIT 1.它将返回第一行

【讨论】:

【参考方案4】:

试试这个:

SELECT TOP 1 sum(h.principal+h.interest) as amt_paid, h.trx_date
FROM Loanhist h WHERE h.ac_no = '$id' AND h.trx_type='LP'
ORDER BY h.ac_no DESC;

【讨论】:

这不是假设 ac_no 一天不能有超过一笔交易吗? 如果一天有多个交易,则选择最新的。 听起来他们想要最后的交易日期,否则不需要汇总。 根据她的描述,她正在尝试获取上次交易日期的本金+利息的总和。 是的,最后交易日期。这并不排除下午 2 点和 3 点的交易,这两个时间都在最后一天。

以上是关于在 SQL 中获取用户的最后一笔付款的主要内容,如果未能解决你的问题,请参考以下文章

授权一笔未知金额的交易,稍后收取服务费用

获取每个月的最后一条记录

一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?

java sqlserver 怎么做当某一笔数据超时时,自动更新该笔数据状态?

Paypal payflow 在一笔交易中有两个定期订阅

Stripe:重复付款失败