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

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

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());
}
}
1205030 次浏览

在没有任何进一步信息的情况下,我们能做的最好的数据库是什么

Sql Server

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1
SELECT * FROM table ORDER BY Id DESC LIMIT 1
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

是的,这是mysql, SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC

假设你有一个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

这会让你得到最高的Id号。

当你颠倒顺序时,最后一个就是第一个。

在Oracle中,你可以这样做:

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

这是一种可能的方法。

要获取sql数据库的最后一个,使用下面的sql字符串:

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

输出:

最后一行你的数据库!

$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);

你也可以这样做:

SELECT LAST (column_name) AS LAST_CUSTOMER FROM table_name;

select ADU.itemid, ADU.startdate, internalcostprice
from ADUITEMINTERNALCOSTPRICE ADU


right join


(select max(STARTDATE) as Max_date, itemid
from ADUITEMINTERNALCOSTPRICE
group by itemid) as A


on A.ITEMID = ADU.ITEMID
and startdate= Max_date

在表设计中使用自动行标识符始终是一种良好的实践,例如

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

,那么你可以通过

 select * from yourTable where rowID =  @@IDENTITY

我想这个就可以了。

declare @x int;
select @x = max(id) from table_name;
select * from where id = @x;
如果你有一个自递增字段(比如ID),那么你可以这样做: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo) < / p >
我给里卡多投了一票。实际上最大比排序有效得多。 看到不同之处。它的优秀。< / p >

我必须得到最后一行/更新记录(时间戳)

`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`

MS SQL Server已经支持ANSI SQL FETCH FIRST很多年了:

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

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

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

如果您的表没有自动递增的值,或者没有好的元素可以排序,那么您可以像这样获得任意集合中项目的任意顺序

SELECT
[item]
FROM (
SELECT
*
, ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY GETDATE()) 'RN'
FROM [TABLE]
) RDR
WHERE [RN] = (
SELECT
MAX([RN])
FROM (
SELECT
*
, ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY GETDATE()) 'RN'
FROM [TABLE]
) RDR
)

一个重要的警告是,对于较大的数据集,这种方法的性能将非常糟糕。