在WHERE条件中获取SQL中的最后一条记录

Din*_*del 7 sql t-sql sql-server where-clause

我有loanTable两个字段loan_idstatus

loan_id status
==============
1       0
2       9
1       6
5       3
4       5
1       4  <-- How do I select this??
4       6
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要显示在过去Statusloan_id1点即是status4.可以帮助我在此查询.

Jon*_*ler 15

由于ID 1的"最后一行"既不是最小值也不是最大值,因此您处于轻度混乱的状态.表中的行没有订单.因此,您应该提供另一列,可能是插入每行的日期/时间,以提供数据的排序.另一个选项可以是一个单独的,自动递增的列,它记录插入行的顺序.然后可以编写查询.

如果调用了额外的列status_id,那么你可以写:

SELECT L1.*
  FROM LoanTable AS L1
 WHERE L1.Status_ID = (SELECT MAX(Status_ID)
                         FROM LoanTable AS L2
                        WHERE L2.Loan_ID = 1);
Run Code Online (Sandbox Code Playgroud)

(可以省略表别名L1和L2,而不会混淆DBMS或经验丰富的SQL程序员.)

目前看来,没有可靠的方法可以知道哪一行是最后一行,因此您的查询无法回答.


Sko*_*ioh 5

您的表是否恰好具有主ID或时间戳?如果没有,那么你想要的是不可能的.

如果是,那么:

    SELECT TOP 1 status
    FROM loanTable
    WHERE loan_id = 1
    ORDER BY primaryId DESC
    -- or
    -- ORDER BY yourTimestamp DESC
Run Code Online (Sandbox Code Playgroud)