如何在SQL Server中检索除一个之外的最后一个标识?

如何在SQL Server中检索除一个之外的最后一个标识?,sql,sql-server,Sql,Sql Server,我想知道如何在Sql Server中检索除一个之外的最后一个标识 这就是(n-1)。我可以得到@identity-1。我的问题是,当上一个被删除时,整个计算都会出错。请在此方面提供帮助。我猜您正在尝试查找表的标识列的第二个最大值。查询: Select max(identityColumnName) from [tablename] where identityColumnName not in (select max( identityColumnName) from [tablen

我想知道如何在Sql Server中检索除一个之外的最后一个标识
这就是
(n-1)
。我可以得到
@identity-1
。我的问题是,当上一个被删除时,整个计算都会出错。请在此方面提供帮助。

我猜您正在尝试查找表的标识列的第二个最大值。查询:

Select max(identityColumnName) from [tablename] where identityColumnName     
not in  (select max( identityColumnName) from [tablename])

我猜您正在尝试查找表的标识列的第二个最大值。查询:

Select max(identityColumnName) from [tablename] where identityColumnName     
not in  (select max( identityColumnName) from [tablename])

如果希望获得表的最大标识,则应使用

 Select Max(IdentityColumn) from YourTable
SELECT TOP(1) IdentityColumn FROM YourTable ORDER BY IdentityColumn  DESC

如果要获取列的最后一个标识,则应使用

 Select Max(IdentityColumn) from YourTable
SELECT TOP(1) IdentityColumn FROM YourTable ORDER BY IdentityColumn  DESC

如果希望获得表的最大标识,则应使用

 Select Max(IdentityColumn) from YourTable
SELECT TOP(1) IdentityColumn FROM YourTable ORDER BY IdentityColumn  DESC

如果要获取列的最后一个标识,则应使用

 Select Max(IdentityColumn) from YourTable
SELECT TOP(1) IdentityColumn FROM YourTable ORDER BY IdentityColumn  DESC

下面是另一种方法,但是我相信Damien是正确的,您最好描述一下实际问题,因为获取标识列的最后第二个值可能不是解决方案:

SELECT TOP 1 IdentityColumn
FROM 
(
    SELECT TOP 2 IdentityColumn
    FROM YourTable
    ORDER BY IdentityColumn DESC
) t
ORDER BY IdentityColumn 

下面是另一种方法,但是我相信Damien是正确的,您最好描述一下实际问题,因为获取标识列的最后第二个值可能不是解决方案:

SELECT TOP 1 IdentityColumn
FROM 
(
    SELECT TOP 2 IdentityColumn
    FROM YourTable
    ORDER BY IdentityColumn DESC
) t
ORDER BY IdentityColumn 

为了只获取倒数第二个标识符,您还可以将LAG或LEAD与TOP结合使用

注意,这假设ID是一个由标识自动填充的INT。
当ID为(aka Guid)时,排序并不意味着最大值给出最后创建的记录

例如:

使用具有标识的表进行脚本后测试:


为了只获取倒数第二个标识符,您还可以将LAG或LEAD与TOP结合使用

注意,这假设ID是一个由标识自动填充的INT。
当ID为(aka Guid)时,排序并不意味着最大值给出最后创建的记录

例如:

使用具有标识的表进行脚本后测试:


可通过
选择IDENT_current(“”)

因此,如果您想要第二个max标识,则需要以下信息:

SELECT ISNULL(IDENT_CURRENT('<YourTableName>'), 1)-1
选择ISNULL(当前标识(“”),1)-1

表格的当前标识可以通过
选择当前标识(“”)

因此,如果您想要第二个max标识,则需要以下信息:

SELECT ISNULL(IDENT_CURRENT('<YourTableName>'), 1)-1
选择ISNULL(当前标识(“”),1)-1

无论您试图解决什么问题,试图获得“最后但只有一个身份”都不是解决方案。你能概述一下你试图处理的更广泛的问题吗?我认为对于你的用例,Kapil的答案是:无论你试图解决什么问题,试图获得“最后但只有一个身份”都不是解决方案。你能概述一下你试图处理的更广泛的问题吗?我认为对于你的用例,Kapil的答案是匹配的