Php 在SQL中从用户处获取上次付款

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 你的问题不是很清楚。但是,如果您只想让用户执行最后一个事务,那

我有这张桌子

我正试图得到上一个交易日的本金+利息之和第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

你的问题不是很清楚。但是,如果您只想让用户执行最后一个事务,那么最好的方法是依赖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点的交易,这两个时间都是在最后一天。