SQL - 如何在列中找到最高数字?

Rob*_*cks 46 mysql sql sql-server

假设我在Customers表中有以下数据:(仅此而已)

ID   FirstName   LastName
-------------------------------
20   John        Mackenzie
21   Ted         Green
22   Marcy       Nate
Run Code Online (Sandbox Code Playgroud)

什么类型的SELECT语句可以在ID列中获取数字22?

我需要做这样的事情来生成一个唯一的ID.当然我可以通过自动增量让系统执行此操作,但是我如何获得自动生成的ID?

我想到了"从客户中选择ID"并计算返回的行,但这看起来非常无效,在这种情况下,它会错误地返回"3",尽管我需要23的唯一ID.

not*_*oop 104

你可以做

SELECT MAX(ID) FROM Customers;
Run Code Online (Sandbox Code Playgroud)


Dav*_*res 17

如果您刚刚将一条记录插入到Customers表中,并且您需要最近填充的ID字段的值,则可以使用SCOPE_IDENTITY函数.这仅在INSERT发生在与SCOPE_IDENTITY调用相同的范围内时才有用.

INSERT INTO Customers(ID, FirstName, LastName)
Values
(23, 'Bob', 'Smith')

SET @mostRecentId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

这可能对你有用,也可能没用,但这是一个很好的技巧.它也适用于自动生成的列.


Joe*_* Jr 10

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

然后获取ID.


Bri*_*sbe 8

要随时获得它,你可以做到SELECT MAX(Id) FROM Customers.

但是,在添加它的过程中,您还可以使用SCOPE_IDENTITY- 来获取该过程最后添加的id.
这样更安全,因为它可以保证您获得 - Id以防其他人同时被添加到数据库中.


Dam*_*mon 7

如果你在说MS SQL,这是最有效的方法.这将根据标识的任何列从表中检索当前标识种子.

select IDENT_CURRENT('TableName') as LastIdentity
Run Code Online (Sandbox Code Playgroud)

使用MAX(id)更通用,但是例如我有一个包含4亿行的表,需要2分钟才能获得MAX(id). IDENT_CURRENT几乎是瞬间......