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

时间:2011-03-04 08:46:02

标签: sql sql-server sql-server-2008

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

select * from table

我使用时: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());
    }
}

17 个答案:

答案 0 :(得分:232)

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

Sql Server

SELECT TOP 1 * FROM Table ORDER BY ID DESC

<强> MySQL的

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

答案 1 :(得分:17)

假设您有一个Id列:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

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

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

但是,我对此并不是百分之百确定。

修改

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

修改

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

SELECT MAX(Id)
  FROM table

这将为您提供最高的身份证号码。

答案 2 :(得分:7)

SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

是的,这是mysql,SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC

答案 3 :(得分:6)

获取 SQL-Database 的最后使用此sql字符串:

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);

输出:

您的数据库的最后一行!

答案 4 :(得分:5)

SELECT * FROM TABLE WHERE id = (SELECT MAX(id) FROM TABLE);

SELECT MAX(id)表示获取表中最大的id它返回一个数字,这是现在使用WHERE id = maxId的最大ID你可以得到最大id的行,这意味着最后一行如果你正在使用auto_increment。

答案 5 :(得分:3)

SELECT * FROM table ORDER BY Id DESC LIMIT 1

答案 6 :(得分:2)

几乎所有的答案都假设 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;

答案 7 :(得分:2)

最后一个是你颠倒订购时的第一个。

答案 8 :(得分:1)

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

答案 9 :(得分:0)

在Oracle中,您可以这样做:

SELECT *
FROM (SELECT EMP.*,ROWNUM FROM EMP ORDER BY ROWNUM DESC)
WHERE ROWNUM=1;

这是可能的方法之一。

答案 10 :(得分:0)

$sql="SELECT tot_visit FROM visitors WHERE date = DATE(NOW()) - 1 into @s                
$conn->query($sql);
$sql = "INSERT INTO visitors (nbvisit_day,date,tot_visit) VALUES (1,CURRENT_DATE,@s+1)";
$conn->query($sql);

答案 11 :(得分:0)

您还可以执行以下操作:

SELECT LAST (column_name) AS LAST_CUSTOMER FROM table_name;

答案 12 :(得分:0)

$href = "/en/products/saucony-switchback-iso/416.html";
$href_replace = substr_replace($href, "/de/", 0);

答案 13 :(得分:0)

在表格设计中总是一个好习惯,即拥有一个自动行标识符,例如

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL

,那么您可以通过

标识最后一行
 select * from yourTable where rowID =  @@IDENTITY 

答案 14 :(得分:0)

我认为应该这样做。

declare @x int;
select @x = max(id) from table_name;
select * from where id = @x;

答案 15 :(得分:0)

MS SQL Server多年来一直支持ANSI SQL FETCH FIRST

SELECT * FROM TABLE
ORDER BY ID DESC 
OFFSET 0 ROWS FETCH FIRST 1 ROW ONLY

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

答案 16 :(得分:-2)

我支持里卡多。实际上,max比排序有效得多。 看到差异。其优秀。

我必须获取最后一行/更新记录(timeStamp)

`sqlite> select timeStamp from mypadatav2 order by timeStamp desc limit 1;
 2020-03-11 23:55:00
 Run Time: real 1.806 user 1.689242 sys 0.117062`

`sqlite> select max(timeStamp) from mypadatav2;
 2020-03-11 23:55:00
 Run Time: real 0.553 user 0.412618 sys 0.134340`