我有这张桌子
我试图从上次交易日期获得本金+利息的总和。 第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
答案 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.它将返回第一行