当前位置: 首页 > 面试题库 >

从mysql获取最后一条记录

糜鸿风
2023-03-14
问题内容

我正在使用mysql并遇到一些问题。我想检索插入的最后一行。

<<以下是详细>>

以下是我创建表格的方式。

create table maxID (myID varchar(4))

我在其中插入了四个值,如下所示

insert into maxID values ('A001')
insert into maxID values ('A002')
insert into maxID values ('A004')
insert into maxID values ('A003')

当我执行时select myID, last_insert_id() as NewID from maxID,我得到如下输出

myId NewID
A001   0  
A002   0  
A004   0  
A003   0

当我尝试下面的代码时,

select myId, last_insert_id() as NewID, @rowid:=@rowid+1 as myrow from maxID, (SELECT @rowid:=0) as init

我得到如下输出。

myId NewID  rowid
A001   0      1
A002   0      2
A004   0      3
A003   0      4

但是,当我使用代码时select myId, last_insert_id() as NewID, @rowid:=@rowid+1 as myrow from maxID, (SELECT @rowid:=0) as init where @rowid = 4,出现错误Uknown column 'myrow' in where clause

使用时where @rowid=4,表中没有任何数据。

链接以播放数据

注意: 这里我使用4只是为了获得所需的输出。稍后我可以从查询中获取(select max(rowid) from maxID)

如果我只想查看最后一条记录,请建议我该怎么做A003

谢谢你的时间。

更新:

我的表中已经有数百万个数据,因此无法按照下面的建议在其中添加新列。


问题答案:

似乎SELECT不能保证a以任何特定顺序返回行(ORDER BY当然,不使用子句)。

根据SQL-92标准(第373页):

如果未指定 ,则 指定的表为T,并且T中的行顺序与实现有关。

好的,MySQL并不完全符合SQL-92,但这是一个严重的提示。

Laurynas
Biveinis(显然隶属于Percona)还指出:

ORDER BY由于月相的原因,没有子句(…)的行的顺序可能会有所不同,这是可以的。

在MySQL手册说,大约InnoDB的:

如果存在,InnoDB总是根据 _[aPRIMARY KEYNOT NULL UNIQUE索引]_对表行进行排序。

就我而言,我 认为 MySQL也可以OPTIMIZE TABLE在多次删除和插入后重新排序行,甚至重用空白空间(我试图找到一个示例,但到目前为止还是失败了)。

鉴于您的表结构,不幸的是底线如此之多,以至于许多因素可能改变了行的顺序。我找不到可靠地确定它们插入顺序的解决方案。当然,除非自创建表以来保留所有二进制日志,否则;)

但是,您可能仍想sequence在表中添加一列。现有行将被分配可能不正确的序列号,但是至少将来的行将被正确排序。

ALTER TABLE maxID ADD sequence INT DEFAULT NULL;
ALTER TABLE maxID ADD INDEX(sequence);
ALTER TABLE maxID MODIFY sequence INT AUTO_INCREMENT;

http://sqlfiddle.com/#!2/63a8d/1



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: SQL Server:只有GROUP BY中的最后一个条目 我有一个这样的表: 我使用以下查询: 以上查询的结果: 在结果组上方按名称排列行,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。 例如: 如何编写以上结果的查询。 谢谢 问题答案: 甚至可能不再需要该组。

  • 我正在尝试对存储在elasticsearch中的记录实现搜索查询。记录结构看起来像这样。 一个框可以包含多个项目。例如,Box3可以有Item1、Item2和Item3。因此,在elasticsearch中,我将有3个不同的文档。同时,同一个框和同一个项目也可以存在,但地址不同。这些文档的transactionID可能相同,也可能不相同。 我的要求是获取最后n个最近的和不同的Transaction

  • 问题内容: 在下表中,如何仅根据登录列获取的 最新记录 ,而不是所有3条记录? 问题答案: 使用按ID分组的汇总。这将列出每个最新的。 要获取完整的单个记录,请对仅返回每个ID 的子查询执行。

  • 问题内容: 我有一个这样的 LoginTime 表: 我想删除的最后一条记录。用户的最后一条记录可以通过识别。 如何使用一个查询执行此操作。 问题答案: 您需要按user_id(例如WHERE user_id = 1)过滤表,然后按时间(例如ORDER BY datetime)对其进行排序,然后将查询限制为一项(例如LIMIT1),然后删除此查询的结果。最后,您将获得如下查询:

  • 问题内容: 桌子: 查询: 结果: 问题: 如何重写查询,使其返回post_id-> 83而不是post_id-> 81? 他们都有相同的论坛ID和主题ID,但是post_id-> 81的日期早于post_id-> 83。 但是,Group By似乎获得了“第一”记录,而不是“最新”记录。 我尝试将查询更改为 但这同时返回post_id 81和83 问题答案: 如果选择在group子句中未使用且不

  • 问题内容: 我有一个包含以下列的数据库表: 在此表中,唯一的唯一值位于id中,即主键。 我想基于datetime值检索该表中的最后一组不同的记录。例如,下面是我的桌子 我想检索ID为4、7、8和9的记录,即具有不同代码(基于datetime值)的最后一组记录。我强调的只是我要实现的目标的一个示例,因为此表最终将包含数百万条记录和数百个单独的代码值。 我可以使用什么SQL语句来实现这一目标?我似乎无