急求考勤打卡的问题

qqsecuty 2011-03-14 03:01:34
if object_id('test.dbo.attendance') is not null drop table attendance
-- 创建数据表
create table attendance
(
name char(5),
id int,
time datetime,
type char(20)
)
go
--插入测试数据
insert into attendance
select '張三 ',59775623,'2010-04-01 07:23:37',null
union all select '張三 ',59775623,'2010-04-01 07:50:21',null
union all select '張三 ',59775623,'2010-04-01 18:20:22',null
union all select '張三 ',59775623,'2010-04-01 18:50:53',null
union all select '李四',59775624,'2010-04-01 07:00:06',null
union all select '李四',59775624,'2010-04-01 18:00:12',null
union all select '李四',59775624,'2010-04-02 08:20:32',null
union all select '李四',59775624,'2010-04-02 17:00:22',null
union all select '李四',59775624,'2010-04-02 18:18:08',null
union all select '王五',59775625,'2010-04-01 08:02:06',null
union all select '王五',59775625,'2010-04-01 18:00:12',null
union all select '王五',59775625,'2010-04-02 07:20:32',null
union all select '王五',59775625,'2010-04-02 12:35:22',null
union all select '王五',59775625,'2010-04-02 18:18:08',null
go


我要得到的是

张三 一天的打卡记录,是这种方式的:
张三 ID号(上午)上班 (上午)下班 上班 下班 ----也就是一行显示完一日的打卡记录

如果在10分钟内同一张卡重复刷了N次,比如8:10分刷的一次卡,8:15再刷一次这个时候还是以8:10分记录,还是
以8:15分记录在数据库中?
补充说明数据库环境是SQL2005,
...全文
285 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJkukow 2011-03-27
  • 打赏
  • 举报
回复
考勤这些东西太简单了,自己写个存储过程用游标来处理嘛。想得到啥数据自己拼出来咯。
Q315054403 2011-03-19
  • 打赏
  • 举报
回复
要从结构设计上解决,非三两条SQL之力。。很繁琐的需求,考勤
last_wolf1860 2011-03-19
  • 打赏
  • 举报
回复
不是很懂楼主的打卡系统怎么设计的:)
打卡流水帐难道不需要记吗?
员工表和打卡流水帐的一个视图应该就可以满足需求啊,为什么还要搞个那么复杂的SQL语句?
xjg775177591 2011-03-18
  • 打赏
  • 举报
回复
对 没错
「已注销」 2011-03-16
  • 打赏
  • 举报
回复
思路:
先建立排班表
再建立一个你要的结果表
然后根基排版表和结果表的结构去把每一笔刷卡数据按要求归类过滤处理到结果表中。
xuchao123456 2011-03-16
  • 打赏
  • 举报
回复
不错啊 呵呵呵 啊
auqfiudh 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangj_0520 的回复:]
做考勤系统没那么简单的了
至少要包含以下表:
人员信息表(该表至少包含是否考勤)
班次表
排班表
请假表
加班表
外出表        (以上可自己发挥.)
考勤打开明细表   (自动ID,员工ID,打卡时间,日期)
日考勤明细分析表  (自动ID,员工ID,上午.....)
月考勤分析表   (自动ID,员工ID,月份,1号,2号......31号) 如果把加班算到这里,可用组合数据(√+2):本日全勤和加班两小时
这个分析可以从以上表得到,呵呵
[/Quote]
日/月考勤分析表 可用触除发器搞定( 月表 建议发工资时通过数据生成)  
wangj_0520 2011-03-15
  • 打赏
  • 举报
回复
做考勤系统没那么简单的了
至少要包含以下表:
人员信息表(该表至少包含是否考勤)
班次表
排班表
请假表
加班表
外出表
考勤打开明细表
日考勤明细分析表
月考勤分析表
这个分析可以从以上表得到,呵呵
qqsecuty 2011-03-14
  • 打赏
  • 举报
回复
越搞越复杂啊,我晕
yfq101 2011-03-14
  • 打赏
  • 举报
回复
那你的sql至少要包括2个表,可能还要包括班别表等更多的表

员工班别表 a 可能如下
ID 班别
59775623 白班1
59775624 白班2
59775625 白班3

班别表 b 可能如下
班别 上班1最早刷卡时间 上班1最迟刷卡时间 上班2最早刷卡时间 上班2最迟刷卡时间

白班1 7:30 8:20 11:30 12:50
白班2 。。。。。。。。。。。。。。。。。。
白班3
qqsecuty 2011-03-14
  • 打赏
  • 举报
回复
那是如何转为横排的呢?
CCC的 2011-03-14
  • 打赏
  • 举报
回复
如果在10分钟内同一张卡重复刷了N次,比如8:10分刷的一次卡,8:15再刷一次这个时候还是以8:10分记录,还是
以8:15分记录在数据库中?
这个要看你们是什么时候上班了,如果是8:20上班就取8:15,如果是8:00上班就取8:10,原则就是取离上班时间最新的一笔记录,我们公司的考勤软件就是这么处理的。
qqsecuty 2011-03-14
  • 打赏
  • 举报
回复
比如:7:30-8:20 早上上班打卡有效时间,
11:30-12:50 早上下班打卡有效时间
13:00-13:50 下午打卡有效时间
17:50-18:50 下午下班打卡有效时间
我要得到的是

张三 一天的打卡记录,是这种方式的:
张三 ID号(上午)上班 (上午)下班 上班 下班 ----也就是一行显示完一日的打卡记录
qqsecuty 2011-03-14
  • 打赏
  • 举报
回复
你好,取8:15的那个数据就可以了。也就是取最小的那个时段,那我查询的时候往新表中插入吗?

yfq101 2011-03-14
  • 打赏
  • 举报
回复
如果在10分钟内同一张卡重复刷了N次,比如8:10分刷的一次卡,8:15再刷一次这个时候还是以8:10分记录,还是以8:15分记录在数据库中? -- 老兄,不明白你的意思,你的程序往数据库里插了,数据库就有,不插就没有咯
qqsecuty 2011-03-14
  • 打赏
  • 举报
回复
分不够的话,我会补上的,一定一定

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧