在SQL中获取用户的上次付款

时间:2018-05-15 16:11:36

标签: php sql sql-server

我有这张桌子

enter image description here

我试图从上次交易日期获得本金+利息的总和。 第4栏。是最后执行的交易 - [无列名称] 是交易日期

到目前为止我尝试过:

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

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

试试这个:

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;

答案 3 :(得分:0)

尝试使用LIMIT关键字。例如,从表名中选择*,其中条件为LIMIT 1.它将返回第一行