求考勤查询SQL查询语句或过程

chimeilong 2010-02-04 07:48:45
表结构如下:
ID ATTTIME UserID
1 2010-01-01 8:10:00 1
2 2010-01-01 8:15:00 1
3 2010-01-01 17:10:00 2
4 2010-01-02 8:05:00 1
5 2010-01-02 17:00:00 1


我想得到结果如下:

userid date montime aftertime
1 2010-01-01 8:10:00 null
1 2010-01-02 8:05:00 17:00:00
2 2010-01-01 null 17:10:00


在线等哇~谢谢各位大大了~!
...全文
153 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
东那个升 2010-02-05
  • 打赏
  • 举报
回复
注掉

select CONVERT(char(18),[ATTTIME],100) like
from tb

东那个升 2010-02-05
  • 打赏
  • 举报
回复


if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[ATTTIME] datetime,[UserID] int)
insert [tb]
select 1,'2010-01-01 8:10:00',1 union all
select 2,'2010-01-01 8:15:00',1 union all
select 3,'2010-01-01 17:10:00',2 union all
select 4,'2010-01-02 8:05:00',1 union all
select 5,'2010-01-02 17:00:00',1


select CONVERT(char(18),[ATTTIME],100) like
from tb

with cte as(
select [UserID],[ATTTIME],CONVERT(char(8),[ATTTIME],112) as date1
,case when CONVERT(char(18),[ATTTIME],100) like '%AM' then 'montime' else 'aftertime' end as AMORPM
from tb)


select userid,date1,[montime],[aftertime]
from ( select userid,date1,AMORPM,case when AMORPM='montime' then MIN(atttime) else MAX(atttime) end as atttime
from cte
group by userid,date1,AMORPM
) a
PIVOT
( min([ATTTIME])
for AMORPM in([montime],[aftertime])) as pvt
order by userid


chimeilong 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nianran520 的回复:]
SQL code--> 测试数据:[tb]ifobject_id('[tb]')isnotnulldroptable[tb]gocreatetable[tb]([ID]int,[ATTTIME]datetime,[UserID]int)insert[tb]select1,'2010-01-01 8:10:00',1unionallselect2,'2010-01-01 8:15:00',1unio?-
[/Quote]

如果一个人一天有多条记录怎么办?我需要得到最早的一早和最晚的一条,最早的一天超过12点,那么montime就为空,同样最晚的一条小于12点也为空,全天只有一条记录就需要判断是否超过12点
chimeilong 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 josy 的回复:]
是否存在一天不止两个时间的?
[/Quote]

存在!所以楼上的代码不能准确的统计出来~
chimeilong 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luoyoumou 的回复:]
-- 没有取数标准(考勤制度),你取的数据一一点意义也没有!


-- 考勤数据,一般是要按照公司的考勤制度去取数据的!


-- 楼主扯卵蛋......
[/Quote]

你才扯蛋呢~这个和考勤制度无关好吧,只是一个大概的考情统计而已,只是需要大概的显示一下这个人每天的记录而已~
luoyoumou 2010-02-04
  • 打赏
  • 举报
回复
-- 没有取数标准(考勤制度),你取的数据一一点意义也没有!


-- 考勤数据,一般是要按照公司的考勤制度去取数据的!


-- 楼主扯卵蛋......
东那个升 2010-02-04
  • 打赏
  • 举报
回复
1楼正解
百年树人 2010-02-04
  • 打赏
  • 举报
回复
是否存在一天不止两个时间的?
易十五 2010-02-04
  • 打赏
  • 举报
回复
rrr
--小F-- 2010-02-04
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-02-04 20:11:42
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[ATTTIME] datetime,[UserID] int)
insert [tb]
select 1,'2010-01-01 8:10:00',1 union all
select 2,'2010-01-01 8:15:00',1 union all
select 3,'2010-01-01 17:10:00',2 union all
select 4,'2010-01-02 8:05:00',1 union all
select 5,'2010-01-02 17:00:00',1
--------------开始查询--------------------------
select
userid,
convert(varchar(10),[ATTTIME],120) as date,
case datepart(hour,min([ATTTIME])) when 8 then convert(varchar(8),min([ATTTIME]),108) else null end as montime,
case datepart(hour,max([ATTTIME])) when 17 then convert(varchar(8),max([ATTTIME]),108) else null end as aftertime
from
[tb]
group by
userid,convert(varchar(10),[ATTTIME],120)
order by
userid

----------------结果----------------------------
/* userid date montime aftertime
----------- ---------- -------- ---------
1 2010-01-01 08:10:00 NULL
1 2010-01-02 08:05:00 17:00:00
2 2010-01-01 NULL 17:10:00

(3 行受影响)
*/
--小F-- 2010-02-04
  • 打赏
  • 举报
回复
其实看不出来你的判断标准的
nianran520 2010-02-04
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[ATTTIME] datetime,[UserID] int)
insert [tb]
select 1,'2010-01-01 8:10:00',1 union all
select 2,'2010-01-01 8:15:00',1 union all
select 3,'2010-01-01 17:10:00',2 union all
select 4,'2010-01-02 8:05:00',1 union all
select 5,'2010-01-02 17:00:00',1

select * from [tb]
/*
userid date montime aftertime
1 2010-01-01 8:10:00 null
1 2010-01-02 8:05:00 17:00:00
2 2010-01-01 null 17:10:00
*/

select userid,
convert(varchar(10),[ATTTIME],120) as date,
case datepart(hour,min([ATTTIME])) when 8 then convert(varchar(8),min([ATTTIME]),108) else null end as montime,
case datepart(hour,max([ATTTIME])) when 17 then convert(varchar(8),max([ATTTIME]),108) else null end as aftertime
from [tb]
group by userid,convert(varchar(10),[ATTTIME],120)
order by userid
--------------------------------
1 2010-01-01 08:10:00 NULL
1 2010-01-02 08:05:00 17:00:00
2 2010-01-01 NULL 17:10:00

一、项目简介本课程演示的是一套基于SSM实现的考勤管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。课程包含:1. 项目源码、项目文档、数据库脚本、软件工具等所有资料2. 带你从零开始部署运行本套系统3. 该项目附带的源码资料可作为毕设使用4. 提供技术答疑二、技术实现后台框架:Spring、SpringMVC、MyBatisUI界面:JSP、jQuery 、H-ui数据库:MySQL 三、系统功能该系统共包含两种角色:员工、管理员,主要分为前台和后台两大模块。1.前台模块 前台首页、新闻公告、员工活动、职位招聘、留言板、用户注册、用户登录、个人中心、我的考勤、我的奖惩、我的培训、我的薪资、修改密码等功能。2.后台模块 系统后台登陆、管理员管理、员工信息管理、部门管理、职务管理、考勤类别管理、员工考勤管理、员工奖惩管理、员工培训管理、员工薪资管理、网站栏目管理、网站内容管理、职位招聘管理、职简历管理、留言交流管理、留言回复管理等功能。该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 四、项目截图1)前台首面2)个人信息页面3)员工信息管理4)考勤类别管理5)考勤信息管理6)员工薪资管理  更多Java毕设项目请关注【毕设系列课程】https://edu.csdn.net/lecturer/2104   

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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