根据SQL中另一列的最大值选择两列

根据SQL中另一列的最大值选择两列,sql,ms-access,max,Sql,Ms Access,Max,嗨,这是我用的那张桌子 Loanno Balance amount DueDATE 1001045 308731.770000 12/31/99 1001045 2007700.740000 12/31/99 1001045 3087318905.770000 11/01/99 1001045 308731.770000 12/31/99 我必须根据余额金额的最大值选择Loanno和DueDate。 Loanno不是唯一的。请帮我解决这个问题。试试这个: SELECT L.L

嗨,这是我用的那张桌子

Loanno  Balance amount  DueDATE
1001045 308731.770000   12/31/99
1001045 2007700.740000  12/31/99
1001045 3087318905.770000   11/01/99
1001045 308731.770000   12/31/99
我必须根据余额金额的
最大值选择
Loanno
DueDate
Loanno
不是唯一的。请帮我解决这个问题。

试试这个:

SELECT L.Loanno, L.Balanceamount, L.DueDate
     FROM dbo.Loan L 
     INNER JOIN 
         (
          SELECT Loanno, MAX(Balancemount) as MaxBalance FROM dbo.Loan
             GROUP BY LoanNo
         ) SUB ON L.Loanno = SUB.Loanno AND L.Balanceamount = SUB.MaxBalance
子查询返回每个贷款的
最大余额
(不考虑日期) 当合并回原始表时,剩下的是LoanNo、最大余额和到期日期

好的,刚刚在MS ACCESS中测试了下面的查询,它工作正常,用实际的表名替换
Table1

SELECT T.LoanNo, T.DueDate, T.BalanceAmount
 FROM Table1 As T
  INNER JOIN (
     SELECT T.Loanno, Max([T.Balanceamount]) AS MaxBalance
     FROM Table1 as T
     GROUP BY T.Loanno) SUB ON T.LoanNo = SUB.LoanNo AND T.BalanceAmount = SUB.MaxBalance
试试这个:

SELECT L.Loanno, L.Balanceamount, L.DueDate
     FROM dbo.Loan L 
     INNER JOIN 
         (
          SELECT Loanno, MAX(Balancemount) as MaxBalance FROM dbo.Loan
             GROUP BY LoanNo
         ) SUB ON L.Loanno = SUB.Loanno AND L.Balanceamount = SUB.MaxBalance
子查询返回每个贷款的
最大余额
(不考虑日期) 当合并回原始表时,剩下的是LoanNo、最大余额和到期日期

好的,刚刚在MS ACCESS中测试了下面的查询,它工作正常,用实际的表名替换
Table1

SELECT T.LoanNo, T.DueDate, T.BalanceAmount
 FROM Table1 As T
  INNER JOIN (
     SELECT T.Loanno, Max([T.Balanceamount]) AS MaxBalance
     FROM Table1 as T
     GROUP BY T.Loanno) SUB ON T.LoanNo = SUB.LoanNo AND T.BalanceAmount = SUB.MaxBalance

在SQLServer2005+中,可以使用排名函数

 ;WITH cte AS
 (
  SELECT *, ROW_NUMBER() OVER(PARTITION BY Loanno ORDER BY [Balance Amount] DESC) AS rn
  FROM dbo.your_tableName
  )
  SELECT Loanno, DueDate
  FROM cte
  WHERE rn = 1

在SQLServer2005+中,可以使用排名函数

 ;WITH cte AS
 (
  SELECT *, ROW_NUMBER() OVER(PARTITION BY Loanno ORDER BY [Balance Amount] DESC) AS rn
  FROM dbo.your_tableName
  )
  SELECT Loanno, DueDate
  FROM cte
  WHERE rn = 1
试试这个-:

SELECT Loanno ,DueDate 
FROM
     (SELECT Loanno ,DueDate , MAX(Balance amount) BAL_AMT
      FROM Loandetails 
      GROUP BY Loanno ,DueDate 
     )
试试这个-:

SELECT Loanno ,DueDate 
FROM
     (SELECT Loanno ,DueDate , MAX(Balance amount) BAL_AMT
      FROM Loandetails 
      GROUP BY Loanno ,DueDate 
     )

这将起作用,一个子查询将返回余额字段的最大值,然后使用该值查找具有相同值的一条(或多条)记录

select LoanNo, DueDate 
from _LoanData 
where Balance = (
    select max(Balance)
    from _loandata
    )
或者这个,它从一个按余额降序排列的列表中提取前1条(第一条记录)。就性能而言,这要慢一些

select top 1 LoanNo, DueDate, Balance
from _LoanData 
order by Balance desc

祝你好运。

这将起作用,子查询将返回余额字段的最大值,然后使用该字段查找具有相同值的一条(或多条)记录

select LoanNo, DueDate 
from _LoanData 
where Balance = (
    select max(Balance)
    from _loandata
    )
或者这个,它从一个按余额降序排列的列表中提取前1条(第一条记录)。就性能而言,这要慢一些

select top 1 LoanNo, DueDate, Balance
from _LoanData 
order by Balance desc

祝你好运。

你在使用哪种RDBMS?你在使用哪种RDBMS?按Loanno和DueDate分组无助于找到最大余额到期的日期,它只会找到唯一日期的最大余额。是的,你是正确的CSL。我误解了这个问题。它应该是按Loanno计算的最大余额。按Loanno和DueDate分组无助于查找最大余额的到期日期,它只会查找唯一日期的最大余额。是的,您是正确的CSL。我误解了这个问题。它应该是Loanno的最大余额。只有当我有一个贷款编号时,这才有效…如果我有多个贷款编号呢?Brian,虽然样本数据集没有说明这一点,但我会暗示在同一个表中可能有不同的Loanno记录,在这种情况下,您的查询不起作用,因为它们只针对总余额最高的贷款,而不是按贷款。请选择前1名贷款否、到期日、来自_loanadaorder by Balance desc、到期日desc。。。这将返回具有最高(最大)到期日的最大余额这仅在我有一个贷款编号时有效…如果我有多个贷款编号会怎么样?Brian,虽然示例数据集没有说明这一点,但我会暗示在同一个表中可能有不同的贷款无记录,在这种情况下,您的查询不起作用,因为它们只针对总余额最高的贷款,而不是按贷款。请选择前1名贷款否、到期日、来自_loanadaorder by Balance desc、到期日desc。。。这将返回具有最高(最大)到期日的最大余额