求一个sql 语句得出所有人在某一天的最早上班时间和最晚下班时间测试数据:字段action是指开电脑的系统记录的登录系统时间一张数据库表:ID Name Logtime action1 张三 2011-08-24 08:00 登录2 张三
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/03 01:37:14
求一个sql 语句得出所有人在某一天的最早上班时间和最晚下班时间测试数据:字段action是指开电脑的系统记录的登录系统时间一张数据库表:ID Name Logtime action1 张三 2011-08-24 08:00 登录2 张三
求一个sql 语句得出所有人在某一天的最早上班时间和最晚下班时间
测试数据:
字段action是指开电脑的系统记录的登录系统时间
一张数据库表:
ID Name Logtime action
1 张三 2011-08-24 08:00 登录
2 张三 2011-08-24 08:31 登录
3 张三 2011-08-24 09:20 离开
4 张三 2011-08-24 09:29 登录
5 张三 2011-08-24 13:50 离开
6 张三 2011-08-24 14:20 登录
7 张三 2011-08-24 15:20 登录
8 张三 2011-08-24 16:30 离开
9 张三 2011-08-24 08:00 登录
10 陶明 2011-08-24 07:31 登录
11 陶明 2011-08-24 08:20 离开
12 陶明 2011-08-24 09:50 登录
13 陶明 2011-08-24 15:50 离开
14 陶明 2011-08-24 16:10 离开
15 陶明 2011-08-24 16:42 离开
最早上班时间必须是action=登录 的最早Logtime(loginTime),最晚下班时间必须是action=离开 的最晚Logtime(logoutTime)
最后想得出的结果是:
Logtime name loginTime logoutTime
日期 姓名 最早上班时间 最晚下班时间
请问具体的sql语句怎么写?
求一个sql 语句得出所有人在某一天的最早上班时间和最晚下班时间测试数据:字段action是指开电脑的系统记录的登录系统时间一张数据库表:ID Name Logtime action1 张三 2011-08-24 08:00 登录2 张三
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#Tab') is null
drop table #Tab
Go
Create table #Tab([ID] int,[Name] nvarchar(2),[Logtime] Datetime,[action] nvarchar(2))
Insert #Tab
select 1,N'张三','2011-08-24 08:00',N'登录' union all
select 2,N'张三','2011-08-24 08:31',N'登录' union all
select 3,N'张三','2011-08-24 09:20',N'离开' union all
select 4,N'张三','2011-08-24 09:29',N'登录' union all
select 5,N'张三','2011-08-24 13:50',N'离开' union all
select 6,N'张三','2011-08-24 14:20',N'登录' union all
select 7,N'张三','2011-08-24 15:20',N'登录' union all
select 8,N'张三','2011-08-24 16:30',N'离开' union all
select 9,N'张三','2011-08-24 08:00',N'登录' union all
select 10,N'陶明','2011-08-24 07:31',N'登录' union all
select 11,N'陶明','2011-08-24 08:20',N'离开' union all
select 12,N'陶明','2011-08-24 09:50',N'登录' union all
select 13,N'陶明','2011-08-24 15:50',N'离开' union all
select 14,N'陶明','2011-08-24 16:10',N'离开' union all
select 15,N'陶明','2011-08-24 16:42',N'离开'
Go
Select
CONVERT(VARCHAR(8),[Logtime],112) AS 日期,
[Name] AS 姓名,
min(CASE WHEN [action]=N'登录' THEN convert(varchar(8),[Logtime],8) END) AS 最早上班时间,
max(CASE WHEN [action]=N'离开' THEN convert(varchar(8),[Logtime],8) END) AS 最晚下班时间
from #Tab
WHERE CONVERT(VARCHAR(8),[Logtime],112)='20110824'
GROUP BY CONVERT(VARCHAR(8),[Logtime],112),[Name]
/*
日期姓名最早上班时间最晚下班时间
20110824陶明07:31:0016:42:00
20110824张三08:00:0016:30:00
*/