用sqlserver 怎样查询出 数据表里 某月上班连续打卡15天的人
发布网友
发布时间:2022-04-11 17:21
我来回答
共3个回答
热心网友
时间:2022-04-11 18:51
以下以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
热心网友
时间:2022-04-11 20:09
这个功能数据库用SQL语句是实现不了的,建议把每个月的上班情况读出来,用编程语言通过编程判断。你的需求是属于业务逻辑功能,数据库实现不了这么复杂的功能。
热心网友
时间:2022-04-11 21:43
假日算不算追问额,这个不是重点吧,那就算连续5天的也可以~
追答我觉得应该用假日表和考勤表关联查询,除非你公司没休假。。。
用sqlserver 怎样查询出 数据表里 某月上班连续打卡15天的人
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....
...行转列,如图所示是每个人每天的考勤打卡数据,怎样可以把每个人的刷卡...
如果是sqlserver你需要先建立一个函数像这样 CREATE FUNCTION [dbo].[JoinString](@time varchar(100),@name varchar(100))RETURNS varchar(2000)ASBEGINDECLARE @tmp varchar(1000)set @tmp=''SELECT @tmp=@tmp+','+sj from (select 人员姓名,CONVERT(varchar(100), 刷卡日期时间, 23) as rq,...
用SQLserver获取考勤打卡缺失的记录
select * from 打卡记录 where 最早打卡时间 is null or 最晚打卡时间 is null
做考勤表,求大神帮实现从原始数据中提取首次打卡和末次打卡时间
我这边有另外的方法,将excel表导入到sqlserver数据库,本来excel里面有3个栏位。可先用=B2&" "&C2符号将第二和第三栏位合并,若合并不了,可先设置两个栏位都为时间或者都为文本。因为sqlserver里面日期格式为2019-05-25 19:00:00。上面操作完成后导入sqlserver,用sql语法检索出你需要的比如打卡...
SQLserver数据库中应用什么样的数据最合适呢?
如果你只是上班打卡,用SQL server就可以了; 如果你要储存会话信息,用户配置信息,购物车数据,建议使用NoSQL数据库; 不过90%的企业或个人,首选数据库都是MySQL数据库。 为什么这么说? 因为,它集 低成本、高可用、可靠性强、易用性强、体积小、速度快开放源码 等特性于一身,所以在金融、财务、网站、 数据处理 等...
如何查询中控指纹考勤机的打卡情况
一,考勤后在界面恢复成初始状态之前按"MENU"键,可看到自己的打卡记录.(下班后或者上班前打卡后你可以试一下).二,如果在考勤机上查询别人的打卡记录则有两个前提:1,管理员权限 2,知道考勤号码 具体操作如下:"MENU"-->管理员确认-->"用户管理"-->"查看考勤用户"-->输入考勤号码-->完成 三,考勤...
中控打卡机怎么才可以把员工所有的考勤调出来
3、连接成功后,点“从设备下载记录数据”,这时考勤机里的数据就会通过数据线上传到软件中,同时有下载多少条记录的提示,这时,你点“出勤记录”就可以看见你刚才下载的所有人员记录数据。一,考勤后在界面恢复成初始状态之前按"MENU"键,可看到自己的打卡记录.(下班后或者上班前打卡后你可以试一下).二,...
如何在中控软件上查指纹考勤机的打卡记录?
一,考勤后在界面恢复成初始状态之前按"menu"键,可看到自己的打卡记录.(下班后或者上班前打卡后你可以试一下).二,如果在考勤机上查询别人的打卡记录则有两个前提:1,管理员权限 2,知道考勤号码 具体操作如下:"menu"-->管理员确认-->"用户管理"-->"查看考勤用户"-->输入考勤号码-->完成 三,考勤...
怎样从指纹考勤机里将考勤打印出来
1、电脑需安装“考勤管理系统标准版”,插入U盘,打开“考勤管理系统标准版。2、打开数据-U盘闪管理,按”确认。3、在弹出的窗口中,选择“9位码(定制,必需先导入U盘员工数据)。4、点击上方“导入记录数据至电脑”,再点击右侧“从U盘导入记录。5、在弹出的对话框中,按“确定”后,系统开始导入...
OA系统如何使用考勤机数据
专业ZK3考勤管理系统,通常从OA中同步相关数据(部门架构,人事档案,请假单,加班单,签卡单,调动单,调薪单等),避免两个系统都要做.