sqlserver第几天,sqlserver 本月第一天

用 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日期计算的问题

dateadd是一个用来相加的一个函数,dd指的是日期里面的日,DATEADD(dd,

DATEDIFF(dd,0,getdate()),

0)

意思是将DATEDIFF(dd,0,getdate())函数返回的日期增加0天,如果将0改成1,DATEADD(dd,

DATEDIFF(dd,0,getdate()),

1)那就是加一天

DATEDIFF函数返回的是两个日期之间的间隔,dd就是间隔多少天。

ASP.NET 、sql 中,怎么取本年第一周只有5天,就计算为本年的第一周? 或者最后一周只有2天,就为一周

sqlserver的周是以周日开始算的

利用select datepart(weekday, ‘2013-01-01’)获取本年第一天是第一周的第几天,就可以算出第二周从哪一天开始,以后就每周7天算下去。

利用SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))获取本年的最后一天,再算出最后一天是该周的第几天。


本文题目:sqlserver第几天,sqlserver 本月第一天
标题链接:http://azwzsj.com/article/phjphc.html