吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1243|回复: 11
收起左侧

[求助] 求一条sql语句, 查询连续的号段

[复制链接]
头像被屏蔽
jackrebel 发表于 2022-8-3 14:46
提示: 作者被禁止或删除 内容自动屏蔽

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

blackg 发表于 2022-8-3 14:46
select
min(t.SerialNumber)+'-'+max(t.SerialNumber) 号段,
CAST(max(SUBSTRING(t.SerialNumber,5,LEN(t.SerialNumber))) AS INT)-
CAST(min(SUBSTRING(t.SerialNumber,5,LEN(t.SerialNumber))) AS INT)+1 连续数量
from(
select SerialNumber,cnt=SUBSTRING(SerialNumber,5,LEN(SerialNumber))-row_number()over(order by getdate())
from @CardList WHERE IsActive=0
)t group by cnt

免费评分

参与人数 8吾爱币 +8 热心值 +5 收起 理由
jefflo + 1 热心回复!
wuxiaolei1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
jimoke + 1 + 1 我很赞同!
qqyou + 1 + 1 热心回复!
vvvwxf + 1 + 1 我很赞同!
AxxxZ + 1 我很赞同!
zhaoyf18 + 1 + 1 没看懂,但必须给分!
jackrebel + 1 + 1 牛皮~~~!

查看全部评分

jimoguying2020 发表于 2022-8-3 15:09
不知道改成啥 发表于 2022-8-3 15:11
截取号段的字符串转换为数字,然后用数字来排序,这样不行吗?
NULL2019 发表于 2022-8-3 15:34
DECLARE @CardList TABLE (id int  identity(1,1),SerialNumber nvarchar(16), IsActive INT)
INSERT INTO @CardList(SerialNumber,IsActive)
VALUES('No.B0013206',1),('No.B0013207',0),('No.B0013208',0),('No.B0013209',0),('No.B0013210',0),('No.B0013211',0),('No.B0013212',1),('No.B0013213',0),('No.B0013214',0),('No.B0013215',0),('No.B0013216',0),('No.B0013217',0),('No.B0013218',0),('No.B0013219',0),('No.B0013220',0),('No.B0013221',0),('No.B0013222',0),('No.B0013223',1)
;

with tmp as (
  select
    ROW_NUMBER() over (
      order by
        Id asc
    ) as IdNew,
    *
  from
    @CardList
  where
    IsActive = 0
)
select
  min(SerialNumber)+ '-' + max(SerialNumber) as 号段,
  count(id) as 连续数量
from
  (
    select
      a.IdNew,
      a.Id,
      a.SerialNumber,
      case when ISNULL(
        replace(a.SerialNumber, 'No.B', ''),
        0
      )-1 = replace(b.SerialNumber, 'No.B', '')
      or replace(b.SerialNumber, 'No.B', '') is null then '连续' else '不连续' end as '连续标志'
    from
      tmp a
      left join tmp b on replace(a.SerialNumber, 'No.B', '') = replace(b.SerialNumber, 'No.B', '')+ 1
  ) sss
group by
  (sss.Id - sss.IdNew)
NULL2019 发表于 2022-8-3 15:38
sql server通过,其他不知道
Eapoul 发表于 2022-8-3 16:34
最佳答案功力深厚
a22488 发表于 2022-8-3 17:11
可真棒啊  这些答案
星峰 发表于 2022-8-3 17:38
NULL2019 发表于 2022-8-3 15:34
DECLARE @CardList TABLE (id int  identity(1,1),SerialNumber nvarchar(16), IsActive INT)
INSERT INTO ...


目前在NO.是连续的情况下是可行,如果NO.中间不连续就有问题了
NULL2019 发表于 2022-8-3 20:21
woliuguojian 发表于 2022-8-3 17:38
目前在NO.是连续的情况下是可行,如果NO.中间不连续就有问题了

基于楼主给的数据写的,只能是抛砖引玉,如果数据不是这样,要根据实际情况调整的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-13 23:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表