考勤统计

dolo1984 2010-03-09 04:40:44
/*
ID 流水号
IDCard 硬件卡号
HLAdd 基站地址
DateTimeSt 开始时间
DateTimeEnd 结束时间
Type 类型:1为进入,2为出来
*/
ID IDCard HLAdd DateTimeSt DateTimeEnd Lujing Type
4634 2080 61470 2009-12-14 01:58:37.000 2009-12-14 02:06:34.000 NULL 1
4638 2080 61471 2009-12-14 04:35:43.000 2009-12-14 04:35:55.000 NULL 2
4639 2812 61462 2009-12-14 03:26:59.000 2009-12-14 03:26:59.000 NULL 1
4640 2812 61497 2009-12-14 03:50:32.000 2009-12-14 04:50:32.000 NULL 2
4641 2792 61462 2009-12-14 04:38:28.000 2009-12-14 04:38:28.000 NULL 2
4642 2513 61518 2009-12-14 05:38:28.000 2009-12-14 05:38:28.000 NULL 2
4643 2513 61551 2009-12-14 05:38:28.000 2009-12-14 05:38:34.000 NULL 1
4644 2513 61518 2009-12-14 05:38:47.000 2009-12-14 05:38:47.000 NULL 2
4645 2080 61470 2009-12-14 06:58:37.000 2009-12-14 06:06:34.000 NULL 1
4646 2080 61471 2009-12-14 07:35:43.000 2009-12-14 07:35:55.000 NULL 2
……
e.g
IDCard 进入时间 出来时间 总共时间
2080 2009-12-14 02:06:34.000 2009-12-14 04:35:43.000 DateDiff(n,出来时间,进入时间)
2080 2009-12-14 06:06:34.000 2009-12-14 07:35:43.000 出来时间-进入时间
2812 2009-12-14 03:26:59.000 2009-12-14 03:50:32.000 出来时间-进入时间
这样的语句要怎么写呢?
...全文
284 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
you_tube 2010-03-09
  • 打赏
  • 举报
回复
引用 5 楼 dolo1984 的回复:
太强悍了,我在想,如果只有进入的,而没有出来的,反过来的话,只有出来的,没有进入的怎么办呢?
就出来了?

看你业务要求了,有时考勤是跨天的,
dolo1984 2010-03-09
  • 打赏
  • 举报
回复
太强悍了,我在想,如果只有进入的,而没有出来的,反过来的话,只有出来的,没有进入的怎么办呢?
就出来了?
东那个升 2010-03-09
  • 打赏
  • 举报
回复
引用 2 楼 nianran520 的回复:
SQL code--> 测试数据:[tb]ifobject_id('[tb]')isnotnulldroptable[tb]createtable[tb]([ID]int,[IDCard]int,[HLAdd]int,[DateTimeSt]datetime,[DateTimeEnd]datetime,[Lujing] sql_variant,[Type]int)goinsert[tb]selec?-

你太强悍了。
东那个升 2010-03-09
  • 打赏
  • 举报
回复
进入的数据没有,只有出来的数据;或者只有进入的数据没有出来的数据怎么办。
nianran520 2010-03-09
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([ID] int,[IDCard] int,[HLAdd] int,[DateTimeSt] datetime,[DateTimeEnd] datetime,[Lujing] sql_variant,[Type] int)
go
insert [tb]
select 4634,2080,61470,'2009-12-14 01:58:37.000','2009-12-14 02:06:34.000',null,1 union all
select 4638,2080,61471,'2009-12-14 04:35:43.000','2009-12-14 04:35:55.000',null,2 union all
select 4639,2812,61462,'2009-12-14 03:26:59.000','2009-12-14 03:26:59.000',null,1 union all
select 4640,2812,61497,'2009-12-14 03:50:32.000','2009-12-14 04:50:32.000',null,2 union all
select 4641,2792,61462,'2009-12-14 04:38:28.000','2009-12-14 04:38:28.000',null,2 union all
select 4642,2513,61518,'2009-12-14 05:38:28.000','2009-12-14 05:38:28.000',null,2 union all
select 4643,2513,61551,'2009-12-14 05:38:28.000','2009-12-14 05:38:34.000',null,1 union all
select 4644,2513,61518,'2009-12-14 05:38:47.000','2009-12-14 05:38:47.000',null,2 union all
select 4645,2080,61470,'2009-12-14 06:58:37.000','2009-12-14 06:06:34.000',null,1 union all
select 4646,2080,61471,'2009-12-14 07:35:43.000','2009-12-14 07:35:55.000',null,2



select
IDCard,
DateTimeEnd as 进入时间,
(select top 1 DateTimeSt from [tb] where IDCard = t.IDCard and Type = 2 and ID > t.ID order by ID) as 出来时间,
datediff(n,DateTimeEnd,
(select top 1 DateTimeSt from [tb] where IDCard = t.IDCard and Type = 2 and ID > t.ID order by ID)) as 总共时间
from [tb] t
where Type = 1
order by IDCard
IDCard 进入时间 出来时间 总共时间
----------- ------------------------------------------------------ ------------------------------------------------------ -----------
2080 2009-12-14 02:06:34.000 2009-12-14 04:35:43.000 149
2080 2009-12-14 06:06:34.000 2009-12-14 07:35:43.000 89
2513 2009-12-14 05:38:34.000 2009-12-14 05:38:47.000 0
2812 2009-12-14 03:26:59.000 2009-12-14 03:50:32.000 24

(所影响的行数为 4 行)
  • 打赏
  • 举报
回复
没看明白意思呀??


回复内容太短了!

34,591

社区成员

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

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