Php 在SQL中从用户处获取上次付款
我有这张桌子 我正试图得到上一个交易日的本金+利息之和第4列。是执行的最后一笔交易-[无列名]是交易日期 到目前为止,我所尝试的:Php 在SQL中从用户处获取上次付款,php,sql,sql-server,Php,Sql,Sql Server,我有这张桌子 我正试图得到上一个交易日的本金+利息之和第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 你的问题不是很清楚。但是,如果您只想让用户执行最后一个事务,那
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
你的问题不是很清楚。但是,如果您只想让用户执行最后一个事务,那么最好的方法是依赖ID而不是日期
SELECT TOP 1 * FROM Loanhist h WHERE h.trx_type='LP' ORDER BY h.ac_no DESC
试试这个:
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;
测试数据生成是针对Oracle的,但是您应该能够轻松地进行调整。实际查询将在SQL server上运行。如果帐户一天内可以发布多笔交易,则需要使用类似的方法。否则,其他答案中的“限制/前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;
尝试使用LIMIT关键字。例如,从条件LIMIT 1所在的表名中选择*。它将返回第一行您能详细说明您要查找的内容吗?因为这里使用的是聚合函数,还可以对它们进行分组。因此,数据库不会返回最后一个事务。我们需要编写一个不同的查询。如果您只想获取最后一笔交易,那么我们可以进行查询。。@Rohit.007,我已编辑了我的问题。谢谢。我想您应该按trx_日期而不是ac_编号订购。:)这不是假设ac_编号一天内不能有多笔交易吗?如果一天内有多笔交易,则会选择最新的交易。听起来他们想要最后一笔交易日期,否则不需要汇总。根据她的描述,她正在尝试从上一个交易日期获得本金+利息的总和。是的,上一个交易日期。这并不排除下午2点和3点的交易,这两个时间都是在最后一天。