如果只有一年,你試試這個(gè)
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、陸川網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陸川等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
select 年份,月份,識(shí)別號(hào),店名稱,金額 From 表1 a
left join (select 年份,月份-1 as 月份,識(shí)別號(hào),店名稱,金額 From 表1 ) b on a.年份=b.年份 and a.月份=b.月份
left join (select 年份,月份-2 as 月份,識(shí)別號(hào),店名稱,金額 From 表1 ) c on a.年份=c.年份 and a.月份=c.月份
left join (select 年份,月份+1 as 月份,識(shí)別號(hào),店名稱,金額 From 表1 ) b on a.年份=b.年份 and a.月份=d.月份
left join (select 年份,月份+2 as 月份,識(shí)別號(hào),店名稱,金額 From 表1 ) e on a.年份=b.年份 and a.月份=e.月份
where (a.金額=0 and b.金額=0 and c.金額=0) or (a.金額=0 and b.金額=0 and d.金額=0) or (a.金額=0 and d.金額=0 and e.金額=0)
看著表寫的,這么個(gè)思路,自己看看有語法錯(cuò)誤嗎吧
這個(gè)問題無法由SQLServer自動(dòng)解決的。
想要解決的話。一種辦法是取消字段的自動(dòng)增長(zhǎng),寫【instead of 觸發(fā)器】,但是相對(duì)于大量的表來說這種方式耗時(shí)間,且觸發(fā)器過多會(huì)影響SQLServer性能。
但是序號(hào)不連續(xù)的數(shù)據(jù)并不影響你的sql語句操作的,沒有特殊需要的話,不要糾結(jié)序號(hào)的連續(xù)
以下以2013年11月為例
1、使用橫向連接,以5天為例,簡(jiǎn)單但不易擴(kuò)展
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、使用縱向分組統(tǒng)計(jì)
with t1(id,rq) as (
select distinct 人員, date from 表 where date='2013-11-01' and date'2013-12-01' ),
--t1求出指定月的人員編號(hào)及不同的打卡日期
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遞歸調(diào)用,每連續(xù)一日days+1,就是求每一打卡時(shí)間是連續(xù)的第幾天
select id
from t
group by id
having max(days)=5
order by id
以上就不刪了,以下可以改短點(diǎn)吧
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
不用寫sql就行。
你先刪除,然后右鍵表名,設(shè)計(jì),把id列刪除掉,保存,然后再右鍵,設(shè)計(jì),添加一個(gè)id列,然后設(shè)置成自增id就行了。
前提是,你之前的id沒有跟其他表有什么關(guān)聯(lián),否則就弄錯(cuò)了。對(duì)應(yīng)不上。