繁体   English   中英

如何找到 sql 中的最后一个序列号?

[英]How find last number of sequence numbers in sql?

我想在 sql 查询中找到最后一个序列号,以自动填充建议字段值。 例如我的代码字段(列)是:1,2,3,4,10,20 所以我想在我的查询中找到 4

如果您的表名为table_name并且看起来像这样:

ID
1
2
3
4
10
20

那么这应该工作:

select min(previd) from 
(select id, lag(id) over(order by id) as previd
from table_name) t
where id - previd > 1;

小提琴

如果列的值例如是“1,2,3,4,6,8,0”,那么您可以使用 function 从字符串中包含的序列中获取最后一个值。

create function dbo.FindLastNumberInSequence 
(
    @Delimited varchar(MAX),
    @Delimiter varchar(50) = ','
)
returns int as
begin
    declare @i int 
    declare @current int
    declare @previous int
    declare @sequenceFound bit = 0

    set @Delimited = @delimiter + @Delimited + @delimiter
    set @i = 1

    while   @i < LEN( @Delimited )
    begin
        set @current = SUBSTRING( @Delimited, @i+1, CHARINDEX( @Delimiter, @Delimited, @i+1 ) - @i-1 )

        if(@sequenceFound=1)
            if (@current != @previous + 1)
                break

        if (@current = @previous + 1)
            set @sequenceFound = 1

        set @previous = @current

        set @i = CHARINDEX( @Delimiter, @Delimited, @i+1 )
    end
    if(@sequenceFound=0)
        set @previous=-1
    return @previous
end

select dbo.FindLastNumberInSequence ('1,2,3,4,10,20', ',')  -- 4
select dbo.FindLastNumberInSequence ('9,8,1,2,3,4,10,20', ',') -- 4
select dbo.FindLastNumberInSequence ('9,8,1,13,4,10,20', ',')  -- -1 (no sequence found)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM