重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

sqlserver连续,sql判断连续

SQL Server中实现字段值自动增长且连续

这个问题无法由SQLServer自动解决的。

创新互联专注于右玉网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供右玉营销型网站建设,右玉网站制作、右玉网页设计、右玉网站官网定制、微信小程序开发服务,打造右玉网络公司原创品牌,更为您提供右玉网站排名全网营销落地服务。

想要解决的话。一种办法是取消字段的自动增长,写【instead of 触发器】,但是相对于大量的表来说这种方式耗时间,且触发器过多会影响SQLServer性能。

但是序号不连续的数据并不影响你的sql语句操作的,没有特殊需要的话,不要纠结序号的连续

用 sqlserver 怎样查询出 数据表里 某月上班连续打卡15天的人

以下以2013年11月为例

1、使用横向连接,以5天为例,简单但不易扩展

with data as ( select * from yourtable where date='2013-11-01' and date'2013-12-01')

select distinct name

from data t1 join data t2 on t1.name=t2.name and t1.date=t2.date+1

join data t3 on t2.name=t3.name and t2.date=t3.date+1

join data t4 on t3.name=t4.name and t3.date=t4.date+1

join data t5 on t4.name=t5.name and t4.date=t5.date+1

2、使用纵向分组统计

with t1(id,rq) as (

select distinct 人员, date from 表 where date='2013-11-01' and date'2013-12-01' ),

--t1求出指定月的人员编号及不同的打卡日期

t2 as (select s2.* from t1 s1 join t1 s2 on s1.id=s2.id and s1.rq=s2.rq-1),

--t2求出所有上一日也打过卡的日期

t3 as (select * from t1 except select * from t2),

--t3求出所有上一日未打过卡的日期

t as (

select id,rq,1 days from t3

union all

select t1.id,t1.rq,t.days+1 from t1 join t on t1.id=t.id and t1.rq=t.rq+1

)

--t4递归调用,每连续一日days+1,就是求每一打卡时间是连续的第几天

select id

from t

group by id

having max(days)=5

order by id

以上就不删了,以下可以改短点吧

with t as (

select 人员 id, date rq, 1 days from 表 t1

where not exists(select * from 表 t2 where t2.date=t1.date-1)

union all

select t1.id,t1.rq,t.days+1 from 表 t1 join t on t1.id=t.id and t1.rq=t.rq+1

)

select id

from t

group by id

having max(days)=5

order by id

sqlserver表中需要删除几十条数据(共有一万条),但是删除完了之后我还希望ID是连续的,这应该怎么操作。

不用写sql就行。

你先删除,然后右键表名,设计,把id列删除掉,保存,然后再右键,设计,添加一个id列,然后设置成自增id就行了。

前提是,你之前的id没有跟其他表有什么关联,否则就弄错了。对应不上。


文章名称:sqlserver连续,sql判断连续
文章分享:http://cqcxhl.com/article/dsgjcdp.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP