我正在使用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总是根据 _[a
PRIMARY KEY
或NOT 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语句来实现这一目标?我似乎无