如何在SQL中选择表的最后一条记录?

Tas*_*sto 104 sql sql-server sql-server-2008

这是一个从表中选择所有记录的示例代码.有人可以告诉我如何选择该表的最后一条记录吗?

select * from table
Run Code Online (Sandbox Code Playgroud)

当我使用:SELECT * FROM TABLE ORDER BY ID DESC LIMIT 我收到此错误:第1行:'LIMIT'附近的语法不正确.这是我使用的代码:

private void LastRecord()
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

    conn.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("SELECT * FROM HD_AANVRAGEN ORDER BY " +
                "aanvraag_id DESC LIMIT 1", conn);
    myReader = myCommand.ExecuteReader();
    while (myReader.Read())
    {
        TextBox1.Text = (myReader["aanvraag_id"].ToString());
        TextBox1.Text += (myReader["wijziging_nummer"].ToString());
        TextBox1.Text += (myReader["melding_id"].ToString());
        TextBox1.Text += (myReader["aanvraag_titel"].ToString());
        TextBox1.Text += (myReader["aanvraag_omschrijving"].ToString());
        TextBox1.Text += (myReader["doorlooptijd_id"].ToString());
        TextBox1.Text += (myReader["rapporteren"].ToString());
        TextBox1.Text += (myReader["werknemer_id"].ToString());
        TextBox1.Text += (myReader["outlook_id"].ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*der 275

没有任何进一步的信息,我们可以做的最好的数据库等等

Sql Server

SELECT TOP 1 * FROM Table ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

MySQL的

SELECT * FROM Table ORDER BY ID DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这就是你订购**DESC的原因** (23认同)
  • top 1 会拿第一个,不是吗? (3认同)
  • 但是如果您使用DESC订购了一百万条记录,那么它将减慢您的查询@AdriaanStander (3认同)
  • @itz-azhar:此查询的 MySQL 形式*不是*通用 SQL 命令;“LIMIT”关键字是 SQL 的扩展,只有某些 RDBMS 实现;值得注意的是,Oracle 没有“LIMIT”关键字 (3认同)

Nei*_*ght 20

假设您有一个Id列:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;
Run Code Online (Sandbox Code Playgroud)

此外,这将适用于SQL Server.我认为您可能需要使用MySQL:

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

但是,我不是百分百肯定的.

编辑

看看其他答案,我现在100%确信我对MySQL声明是正确的:o)

编辑

刚刚看到你的最新评论.你可以这样做:

SELECT MAX(Id)
  FROM table
Run Code Online (Sandbox Code Playgroud)

这将获得最高的身份证号码.

  • 从数据中选择MAX(id)完美! (2认同)

jar*_*rlh 12

FETCH FIRSTMS SQL Server多年来一直支持 ANSI SQL :

SELECT * FROM TABLE
ORDER BY ID DESC 
OFFSET 0 ROWS FETCH FIRST 1 ROW ONLY
Run Code Online (Sandbox Code Playgroud)

(适用于大多数现代数据库。)


Jen*_*eaf 9

在表设计中拥有自动行标识符始终是一个很好的做法,例如

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL
Run Code Online (Sandbox Code Playgroud)

,那么你可以通过以下方式识别你的最后一行

 select * from yourTable where rowID =  @@IDENTITY 
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 7

SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

是的,这是mysql,SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

  • 编辑为 SQL Server,但是您没有在问题中指定您的 DBMS。 (2认同)

Ric*_*her 7

拿到最后一一个的SQL的数据库使用SQL字符串:

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);
Run Code Online (Sandbox Code Playgroud)

输出:

数据库的最后一行!

  • 使用oracle也可以完全正常工作,并且比排序更快 (3认同)

Bos*_*one 7

如果您有一个自增字段(例如ID),那么您可以执行以下操作: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)


Adr*_*ian 7

几乎所有答案都假设 ID 列是有序的(并且可能是自动递增的)。然而,在某些情况下,ID 列未排序,因此 ORDER BY 语句没有任何意义。

最后插入的 ID 可能并不总是最高的 ID,它只是最后一个(唯一)条目。

对于这种情况,一种可能的解决方案是动态创建行 ID:

SET @r = 0;
SELECT * FROM (SELECT *, (@r := @r + 1) AS r_id FROM my_table) AS tmp
    ORDER BY r_id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)


小智 5

SELECT * FROM table ORDER BY Id DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)